Разбери, можно ли запретить изменять объект: при каких условиях и какие ограничения.
Объекты и прототипы
Запретить изменение объекта можно, и есть несколько уровней: `Object.freeze` (полная заморозка), `Object.seal` (запрет структуры), `Object.preventExtensions` (запрет добавления). Все — поверхностные.
Уровни защиты
Object.preventExtensions
Запрещает добавлять новые свойства; менять и удалять существующие можно.
const o = Object.preventExtensions({ a: 1 });
o.b = 2; // не добавится
o.a = 5; // ок
delete o.a; // окObject.seal
Запрещает добавлять и удалять; менять значения существующих можно.
const o = Object.seal({ a: 1 });
o.a = 5; // ок
o.b = 2; // не добавится
delete o.a; // не удалитсяObject.freeze
Запрещает всё: добавлять, удалять и изменять свойства.
const o = Object.freeze({ a: 1 });
o.a = 5; // не изменитсяОграничения
- Все три поверхностные — вложенные объекты не защищены. Нужна рекурсивная
deepFreeze. - В нестрогом режиме нарушения молча игнорируются; в strict — кидают
TypeError. - Проверка:
Object.isFrozen,isSealed,isExtensible.
const и freeze
const защищает только привязку переменной, а freeze — содержимое объекта. Их часто путают.
Коротко для собеседования
Да: preventExtensions (запрет добавления), seal (запрет добавления/удаления), freeze (полный запрет изменений). Все поверхностные — вложенность нужно замораживать рекурсивно. В strict-режиме нарушения кидают ошибку. const защищает ссылку, а не содержимое.