> Как сделать объект немутабельным в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Сбер

Стек: JavaScript

> Пример ответа

В JavaScript существует несколько способов сделать объект немутабельным (иммутабельным), то есть предотвратить изменение его свойств.

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

JAVASCRIPT
const obj = Object.freeze({ a: 1, b: { c: 2 } });
obj.a = 42; // не сработает (в strict mode - ошибка)
obj.b.c = 3; // сработает, так как b - вложенный объект

2. Object.seal() - «запечатывание». Запрещает добавление и удаление свойств, но позволяет изменять значения существующих.

JAVASCRIPT
const obj = Object.seal({ a: 1 });
obj.a = 2; // разрешено
obj.b = 3; // не сработает

3. Object.preventExtensions() - запрещает добавление новых свойств, но удаление и изменение существующих - разрешены.

4. Глубокая заморозка - рекурсивное применение Object.freeze() ко всем вложенным объектам (например, с помощью библиотеки deep-freeze или собственной реализации).

5. Использование Proxy - перехват операций записи и возврат ошибки или игнорирование изменений.

6. Иммутабельные структуры данных - библиотеки вроде Immutable.js или Immer, которые создают новые объекты при каждом изменении, не модифицируя исходные.

Для большинства случаев достаточно Object.freeze() с учетом его поверхностности. Если требуется полная защита от мутаций, используйте глубокую заморозку или специализированные библиотеки.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью