Вебсправочник
Справочник JavaScript

Object.freeze(): поверхностная неизменяемость объекта

Object.freeze запрещает обычные изменения собственных свойств объекта и расширение его новым набором свойств.

Назначение

Object.freeze запрещает обычные изменения собственных свойств объекта и расширение его новым набором свойств.

Как это работает

Замораживание поверхностное: вложенные объекты не становятся замороженными автоматически. Попытка запрещённой записи в строгом режиме вызывает ошибку, а в иных случаях может не дать эффекта без исключения.

Пример

const settings=Object.freeze({size:10,nested:{active:true}});
console.assert(Object.isFrozen(settings));
console.assert(!Object.isFrozen(settings.nested));
settings.nested.active=false;
console.assert(settings.nested.active===false);

Что должно получиться

Внешний объект заморожен, но его вложенная запись остаётся изменяемой. Такая граница полезна, только если разработчик явно понимает глубину сохраняемого состояния.

Граница применения и частая ошибка

Не считайте freeze контролем доступа к секретным данным или полной изоляцией состояния. Ссылки на вложенные объекты по-прежнему позволяют менять их, если они не защищены отдельно.

Самостоятельная проверка

Проверьте Object.isFrozen у внешнего и вложенного объектов. Затем измените вложенное поле и объясните, почему это не нарушает поверхностную гарантию.

JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.