Выбор ответа Junior Объекты и массивы обновлено

Object.freeze и вложенный объект

Вопрос

Что выведет код?

const config = Object.freeze({ api: { url: '/v1' }, retries: 3 });
config.api.url = '/v2';
console.log(config.api.url);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: '/v2'. Object.freeze поверхностный: он запрещает менять свойства самого config, но config.api это ссылка на отдельный, незамороженный объект.

Варианты ответа

  1. '/v1'
  2. '/v2'правильный ответ
  3. TypeError при присваивании
  4. undefined

Разбор

Object.freeze поверхностный: он запрещает менять свойства самого config, но config.api это ссылка на отдельный, незамороженный объект. Его свойство меняется без ошибок, выведется '/v2'. TypeError в строгом режиме был бы при config.retries = 5 или config.api = {}. Для полной заморозки нужен рекурсивный deepFreeze.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.