назад до уроку

Чи можна додати властивість до рядка?

важливість: 5

Розглянемо наступний код:

let str = "Привіт";

str.test = 5;

alert(str.test);

Як ви думаєте, чи буде це працювати? Що буде показано?

Спробуйте запустити:

let str = "Привіт";

str.test = 5; // (*)

alert(str.test);

В залежності від того, втановлений у вас use strict чи ні, результати будуть наступними:

  1. undefined (без суворого режиму)
  2. Помилка (суворий режим)

Чому? Давайте повторимо те, що відбувається в рядку, який позначено (*):

  1. Коли ми намагаємося отримати доступ до str, створюється “об’єкт обгортка”.
  2. В суворому режимі, спроба запису викличе помилку.
  3. В іншому випадку, операція здійсниться і об’єкт отримає властивість test, але після цього “об’єкт обгортка” зникне, отже, якщо код виконується не в суворому режимі, на останньому рядку str не матиме властивості test.

Цей приклад чітко показує, що примітиви не є об’єктами.

Вони не можуть зберігати додаткові данні.