Что делает метод freeze в JavaScript?

Метод Object.freeze() замораживает объект, предотвращая добавление новых свойств, удаление существующих и изменение значений существующих свойств.

Короткий ответ

Что ответить на собеседовании

Метод Object.freeze() замораживает объект, предотвращая добавление новых свойств, удаление существующих и изменение значений существующих свойств. Он также предотвращает изменение прототипа объекта. Замороженный объект остается неизменным.

Подробный разбор

Ответ с пояснениями

Метод Object.freeze() замораживает объект, предотвращая добавление новых свойств, удаление существующих и изменение значений существующих свойств. Он также предотвращает изменение прототипа объекта. Замороженный объект остается неизменным.

Применение Object.freeze():

  1. Создание константных объектов: Гарантия того, что объект не будет изменен в дальнейшем коде.
  2. Повышение производительности: Некоторым движкам JavaScript легче оптимизировать доступ к неизменяемым объектам.
  3. Обеспечение безопасности: Защита внутренних данных объекта от случайных или злонамеренных изменений.

Важное примечание: Object.freeze() замораживает только поверхностно (shallow freeze). Если у свойств объекта есть ссылки на другие объекты, эти вложенные объекты могут быть изменены, если они сами не были заморожены.

Пример:

const obj = {
  prop1: 42,
  prop2: {
    nestedProp: 'hello'
  }
};

Object.freeze(obj);

// Попытки изменения будут проигнорированы в "строгом режиме"
// В нестрогом режиме они могут не вызвать ошибку, но изменения не произойдут
obj.prop1 = 100; // Не изменится
delete obj.prop1; // Не удалится
obj.newProp = 'world'; // Не добавится

console.log(obj.prop1); // 42
console.log(obj.newProp); // undefined

// Вложенный объект НЕ заморожен
obj.prop2.nestedProp = 'goodbye'; // Изменится
console.log(obj.prop2.nestedProp); // goodbye

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее