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

Object.seal(): запрет изменения набора свойств

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

Назначение

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

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

Операция меняет сам объект и возвращает ту же ссылку. В строгом режиме недопустимые присваивания и удаления вызывают исключения. Ограничение поверхностное: вложенные объекты не становятся запечатанными автоматически.

Пример

"use strict";
const settings = {theme: "light", nested: {count: 1}};
Object.seal(settings);
settings.theme = "dark";
settings.nested.count = 2;
console.assert(settings.theme === "dark");
console.assert(Object.isSealed(settings));
console.assert(!Object.isSealed(settings.nested));
let rejected = false;
try { delete settings.theme; } catch (error) { rejected = error instanceof TypeError; }
console.assert(rejected);
console.log(settings);

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

Название темы меняется, а удаление свойства завершается ошибкой. Вложенный объект остаётся самостоятельным изменяемым объектом. Пример показывает разницу между фиксированной структурой и неизменяемыми данными.

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

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

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

Сравните обычный объект, запечатанный и замороженный. Для каждого попробуйте изменить значение, добавить ключ и удалить ключ. Выполняйте попытки отдельно с обработкой ошибок, чтобы одно исключение не прервало всю таблицу.

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

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