Чи можна додати властивість до рядка?
важливість: 5
Розглянемо наступний код:
let str = "Привіт";
str.test = 5;
alert(str.test);
Як ви думаєте, чи буде це працювати? Що буде показано?
Спробуйте запустити:
let str = "Привіт";
str.test = 5; // (*)
alert(str.test);
В залежності від того, втановлений у вас use strict
чи ні, результати будуть наступними:
undefined
(без суворого режиму)- Помилка (суворий режим)
Чому? Давайте повторимо те, що відбувається в рядку, який позначено (*)
:
- Коли ми намагаємося отримати доступ до
str
, створюється “об’єкт обгортка”. - В суворому режимі, спроба запису викличе помилку.
- В іншому випадку, операція здійсниться і об’єкт отримає властивість
test
, але після цього “об’єкт обгортка” зникне, отже, якщо код виконується не в суворому режимі, на останньому рядкуstr
не матиме властивостіtest
.
Цей приклад чітко показує, що примітиви не є об’єктами.
Вони не можуть зберігати додаткові дані.