Пожалуй, заголовок статьи не совсем верный. Правильнее было бы сказать - “объект или элементарный тип данных”. Но я решил сделать попроще. Поэтому получилось так, как получилось )))
Наверняка, если вы хотя бы немного знаете JavaScript, вы встречали что-то подобное:
var len = 0;
var s = 'Hello!';
len = s.length; //len = 6
Здесь мы объявили и инициализировали строковую переменную, а потом получили длину строки с помощью свойства length. Но, раз у переменной s есть свойства, значит, это объект?
А вот и нет. Если мы проверим тип переменной s с помощью оператора typeof, то получим string. То есть строковая переменная - это никакой не объект. Это элементарный тип данных. Но почему же тогда он ведёт себя как объект?
Оказывается, когда мы используем объектно-ориентированный подход, то JavaScript автоматически создаёт новый временный объект String, позволяющий обращаться к свойствам, таким как length. После использования этот объект удаляется, не меняя исходного значения переменной, для которой этот объект создавался.
Если же вы захотите явно использовать объект String в своей программе, надо создать постоянный объект, который не будет автоматически удаляться:
var S = new String('Hello!');
Теперь с переменной S можно работать как с объектом. Хотя она как бы остаётся строкой. И если обычная строковая переменная и объектная строковая переменная содержат одинаковый текст, то вот такое выражение:
S == s
будет истинным. Но здесь надо помнить, что мы сравниваем разные типы. Поэтому вот такое выражение:
S === s
уже вернёт false. Потому что S и s равны, но не идентичны.
В остальном же разницы между строками-переменными и строками-объектами нет. Потому что строковые типы, как уже было сказано, автоматически преобразуются в объекты, если это необходимо.
Кстати, обратное преобразование - из объекта в строку - тоже возможно:
var msg = '';
var S = new String('Hello!');
msg = S + '!!';
Здесь при записи значения переменной S в переменную msg, объектная переменная сначала преобразуется в строковую, потом складывается со строкой '!!', а затем итог записывается в msg. После чего S обратно преобразуется в объект. А msg при этом остаётся строковой переменной.
Ну и в заключение остаётся добавить, что всё сказанное про объект String также справедливо и для числовых и для логических объектов (Number и Boolean). Пример с числами можно найти здесь. По логическим типам всё работает примерно так же.
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.