> Как сделать объект немутабельным в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Сбер
Стек: JavaScript
> Пример ответа
В JavaScript существует несколько способов сделать объект немутабельным (иммутабельным), то есть предотвратить изменение его свойств.
1. Object.freeze() - полная заморозка объекта. Запрещает добавление, удаление и изменение существующих свойств, а также их перечисление и настройку. Однако это «поверхностная» заморозка: вложенные объекты остаются мутабельными.
JAVASCRIPTconst obj = Object.freeze({ a: 1, b: { c: 2 } });obj.a = 42; // не сработает (в strict mode - ошибка)obj.b.c = 3; // сработает, так как b - вложенный объект
2. Object.seal() - «запечатывание». Запрещает добавление и удаление свойств, но позволяет изменять значения существующих.
JAVASCRIPTconst 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() с учетом его поверхностности. Если требуется полная защита от мутаций, используйте глубокую заморозку или специализированные библиотеки.
> Похожие задачи по frontend
Откуда у примитивной строки в JavaScript появляются методы, например toUpperCase?
Как проитерироваться по объекту в JavaScript
Как добавить элемент в документ внутри другого элемента в DOM
Можно ли явно добавить микротаск в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью