Object.freeze() делает объект полностью неизменяемым — нельзя добавлять, удалять или изменять свойства. Object.seal() позволяет изменять значения существующих свойств, но запрещает добавлять новые свойства и удалять существующие. Главное отличие: freeze блокирует всё, seal блокирует только структуру.
Object.freeze() и Object.seal() — это методы для защиты объектов от изменений. Они похожи, но имеют важные отличия.
Делает объект полностью неизменяемым:
const obj = { name: 'Иван', age: 25 };
Object.freeze(obj);
// Все эти операции не сработают
obj.name = 'Петр'; // Не изменится
obj.city = 'Москва'; // Не добавится
delete obj.age; // Не удалитсяЗащищает только структуру объекта:
const obj = { name: 'Иван', age: 25 };
Object.seal(obj);
// Можно менять значения
obj.name = 'Петр'; // Сработает
// Нельзя добавлять/удалять свойства
obj.city = 'Москва'; // Не добавится
delete obj.age; // Не удалится// Конфигурация, которую нельзя менять
const config = {
apiEndpoint: 'https://api.example.com',
timeout: 5000
};
Object.freeze(config);
// Теперь config полностью защищен// Объект с фиксированным набором полей
const user = { name: 'Иван', age: 25 };
Object.seal(user);
// Можно обновить данные пользователя
user.name = 'Петр';
user.age = 30;
// Но нельзя добавить новые поля
user.email = 'test@example.com'; // Не сработаетconst obj = { name: 'Иван' };
Object.freeze(obj);
console.log(Object.isFrozen(obj)); // trueconst obj = { name: 'Иван' };
Object.seal(obj);
console.log(Object.isSealed(obj)); // trueconst obj = {
user: { name: 'Иван' }
};
Object.freeze(obj);
obj.user.name = 'Петр'; // Сработает! Вложенный объект не замороженconst obj = { name: 'Иван' };
Object.freeze(obj);
// Нет способа "разморозить" объект// ❌ Не будет ошибки в нестрогом режиме
const obj = { name: 'Иван' };
Object.freeze(obj);
obj.name = 'Петр'; // Тихо не сработает
// ✅ В строгом режиме будет ошибка
'use strict';
obj.name = 'Петр'; // TypeError// ❌ Думаем, что всё заморожено
const obj = { user: { name: 'Иван' } };
Object.freeze(obj);
obj.user.name = 'Петр'; // Сработает!
// ✅ Нужно замораживать вложенные объекты
Object.freeze(obj.user);
obj.user.name = 'Петр'; // Теперь не сработаетПонимание разницы между freeze и seal помогает создавать более надежный код и предотвращать нежелательные изменения данных.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪