Спробуйте запустити:
let str = "Привіт";
str.test = 5; // (*)
alert(str.test); Ви можете отримати два результати:
undefined- помилку.
Чому? Давайте повторимо те, що відбувається в рядку (*):
- Коли ми намагаємося отримати доступ до
str, створюється "об'єкт обгортка". - Операція з властивістю здійснюється в ній. Отже, об'єкт отримує властивість
test. - Операція закінчується, і "об'єкт обгортка" зникає.
Отже, на останньому рядку str не має властивості. Для кожної операції створюється новий об'єкт обгортка.
Деякі браузери можуть вирішити додатково обмежити програміста і взагалі заборонити присвоювати властивості примітивам. Тому на практиці ми можемо бачити помилки в рядку (*). Але це трохи відрізняється від специфікації.
Цей приклад чітко показує, що примітиви не є об'єктами.
Вони просто не можуть зберігати дані.
Всі операції з властивостями/методами виконуються за допомогою тимчасових об'єктів.