javascript interview question #24

Как думаешь, получится у нас добавить поле user строке s или получим ошибку? Если нет, то что выведется на экран?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Ответ на этот вопрос зависит добавлен ли флаг ’use strict’ твоему JS скрипту.

Возможные варианты:

  • undefined если 'use strict' не был указан в скрипте
  • ошибка, если флаг был добавлен и выполнение происходит в строгом режиме

Почему же это происходит?

Во второй строке, когда ты пытаешься получить доступ к s.user, JavaScript под капотом создает объект обертку типа String.

И если ты используешь строгий режим, то попытка модификации такого объекта бросит ошибку.

Но без флага use strict ошибки не будет и поле user без проблем добавится к объекту обертке.

Но, несмотря на то, что при добавлении ошибки уже нет, на следующей строке нет и объекта обертки. Свойство user пропало и поэтому на экран выведется строка undefined.


ОТВЕТ: В JS нельзя добавлять новые поля примитивным значениям, таким как строки или числа. Результат будет зависеть от того, используется флаг 'use strict' или нет.