В чем разница между Object.freeze() и Object.seal()

«В чем разница между Object.freeze() и Object.seal()» — вопрос из категории JavaScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оба метода ограничивают модификацию объекта, но по-разному:

Object.freeze():

  • Делает объект полностью неизменяемым
  • Нельзя добавлять/удалять свойства
  • Нельзя изменять значения существующих свойств
  • Нельзя изменять конфигурацию свойств (enumerable, configurable и т.д.)

Object.seal():

  • Запрещает добавлять/удалять свойства
  • Позволяет изменять значения существующих свойств
  • Делает все существующие свойства non-configurable

Пример:

const obj = { prop: 42 };

Object.seal(obj);
obj.prop = 100; // работает
delete obj.prop; // не работает

Object.freeze(obj);
obj.prop = 200; // не работает