В чем разница между Object.freeze() и Object.seal()
1️⃣ Как кратко ответить
Object.freeze() делает объект неизменяемым: нельзя добавлять, удалять или изменять свойства. Object.seal() позволяет изменять существующие свойства, но запрещает добавление и удаление свойств.
2️⃣ Подробное объяснение темы
В JavaScript объекты являются изменяемыми по умолчанию, что означает, что вы можете добавлять, удалять и изменять их свойства. Однако иногда требуется ограничить такие изменения. Для этого используются методы Object.freeze() и Object.seal(). Они позволяют контролировать, как объект может быть изменен.
Object.freeze()
Object.freeze() делает объект полностью неизменяемым. Это значит, что после применения этого метода:
- Нельзя добавлять новые свойства.
- Нельзя удалять существующие свойства.
- Нельзя изменять значения существующих свойств.
- Нельзя изменять перечислимость, конфигурируемость или записываемость свойств.
Пример:
const obj = {
name: 'John',
age: 30
};
Object.freeze(obj);
obj.age = 31; // Не сработает, age останется 30
obj.gender = 'male'; // Не сработает, свойство gender не будет добавлено
delete obj.name; // Не сработает, свойство name не будет удалено
const obj = {...}: Создаем объект с двумя свойствамиnameиage.Object.freeze(obj): ПрименяемObject.freeze(), чтобы сделать объект неизменяемым.obj.age = 31;: Попытка изменить значение свойстваageне сработает.obj.gender = 'male';: Попытка добавить новое свойствоgenderне сработает.delete obj.name;: Попытка удалить свойствоnameне сработает.
Object.seal()
Object.seal() делает объект частично неизменяемым. После применения этого метода:
- Нельзя добавлять новые свойства.
- Нельзя удалять существующие свойства.
- Можно изменять значения существующих свойств.
- Нельзя изменять конфигурируемость свойств, но можно изменять их значения.
Пример:
const obj = {
name: 'John',
age: 30
};
Object.seal(obj);
obj.age = 31; // Сработает, age изменится на 31
obj.gender = 'male'; // Не сработает, свойство gender не будет добавлено
delete obj.name; // Не сработает, свойство name не будет удалено
const obj = {...}: Создаем объект с двумя свойствамиnameиage.Object.seal(obj): ПрименяемObject.seal(), чтобы сделать объект частично неизменяемым.obj.age = 31;: Изменение значения свойстваageсработает.obj.gender = 'male';: Попытка добавить новое свойствоgenderне сработает.delete obj.name;: Попытка удалить свойствоnameне сработает.
Применение
- Используйте
Object.freeze(), когда хотите полностью защитить объект от изменений. - Используйте
Object.seal(), когда хотите разрешить изменение значений, но запретить добавление или удаление свойств.
Эти методы полезны для обеспечения целостности данных, особенно в больших приложениях, где объекты могут быть изменены в разных частях кода.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться