Является ли String примитивным типом или объектом в Javascript?
Является ли String примитивным типом или объектом в Javascript? Источник говорит, что Undefined, Null, Boolean, Number и String - все примитивные типы в Javascript. Но он говорит, что String тоже объект. Я смущен. Может кто-нибудь объяснить?
Заранее спасибо;-)
Ответы
Ответ 1
Как.
Существует объект String и есть строковые литералы.
Вы можете вызвать любой строковый метод в литерале, и вы можете вызвать любой строковый метод для строкового объекта.
Основное отличие состоит в том, что строковый объект генерирует новый объект, поэтому new String("foo") !== new String("foo")
Это и объект String - это тип "object"
, а не "string"
Как проверить для обоих?
if(typeof(s) == "string" || s instanceof String){
//s is a string (literal or object)
}
Кредиты @Triynko для фрагмента в комментариях
Ответ 2
Фактически тот же ответ применяется к: строкам, числам, булевым. Эти типы имеют свою примитивную и объектную версию, которые принуждаются во время выполнения приложения под капотом (без вашего ведома).
Принуждение
JavaScript слабо типизирован. Это означает, что всякий раз, когда ваш код хочет выполнить операцию с недопустимыми типами данных (например, добавить строку в число), JavaScript попытается найти наилучшее соответствие для этого сценария.
Этот механизм также называется, как упоминалось выше, принуждением.
Примитивы и свойства
Вы можете найти следующий код, запутывающий:
> "hello world".length
11
потому что "hello world"
- строковый литерал, т.е. примитив. И мы знаем, что примитивы не имеют свойств. Все правильно.
Итак, как это работает? Принуждение - примитив обертывается объектом (принудительно) всего лишь на крошечную долю времени, свойство объекта используется и сразу же удаляется объект.
Принуждение работает в обоих направлениях
Таким образом, примитивы отливаются с вариантами их обертывания объектов, но он также работает и наоборот. Рассмотрим следующий код:
> String("hello ") + String("world")
"hello world"
> Number(2) + 3
5
Объекты сбрасываются в их примитивные версии, чтобы выполнить операцию.
Прочтите это блестящее объяснение, чтобы узнать больше.
Ответ 3
JavaScript имеет как примитивные, так и строковые объекты.
> var foo = "foo"
undefined
> var bar = new String("bar");
undefined
> foo
"foo"
> bar
String
> typeof foo
"string"
> typeof bar
"object"
Ответ 4
var a = "string";
typeof a // yields "string"
var a = new String('string');
typeof a // yields "object"