Що робить Object.freeze()?
Object.freeze() - це вбудований метод JavaScript, який "заморожує" об'єкт,
роблячи його повністю незмінним:
не можна змінити, видалити або додати властивості.
Коротко
Синтаксис:
javascript
Object.freeze(obj)| Аргумент | Опис |
|---|---|
obj | Об'єкт, який потрібно "заморозити" |
Повертає той самий об'єкт, але із замороженими властивостями.
Приклад - заморозка об'єкта
javascript
const user = {
name: 'Богдан',
age: 25
};
Object.freeze(user);
user.name = 'Олег'; // не зміниться
user.city = 'Київ'; // не можна додати нове
delete user.age; // не можна видалити
console.log(user); // { name: 'Богдан', age: 25 }Після Object.freeze() об'єкт стає незмінним:
- властивості не можна перезаписати;
- не можна видалити або додати нові;
- не можна змінити
configurableабоwritable.
Перевірити, чи заморожений об'єкт
javascript
console.log(Object.isFrozen(user)); // trueВажливо: заморозка - поверхнева (shallow)
Якщо всередині є вкладені об'єкти, вони залишаються змінюваними:
javascript
const user = {
name: 'Богдан',
address: {
city: 'Київ'
}
};
Object.freeze(user);
user.address.city = 'Львів'; // працює!
console.log(user.address.city); // "Львів"Тобто Object.freeze() захищає лише верхній рівень.
Для "глибокої" заморозки потрібно заморожувати рекурсивно.
Приклад глибокої заморозки (deep freeze)
javascript
function deepFreeze(obj) {
Object.freeze(obj);
for (const key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null && !Object.isFrozen(obj[key])) {
deepFreeze(obj[key]);
}
}
return obj;
}
const user = {
name: 'Богдан',
address: { city: 'Київ' }
};
deepFreeze(user);
user.address.city = 'Львів'; // не зміниться
console.log(user.address.city); // "Київ"Тепер об'єкт і весь його вміст повністю "заморожені".
Відмінність від інших методів
| Метод | Що робить | Можна змінювати значення | Можна додавати/видаляти властивості |
|---|---|---|---|
Object.freeze() | Повністю заморожує | ні | ні |
Object.seal() | Забороняє додавання/видалення, але дозволяє змінювати значення | так | ні |
Object.preventExtensions() | Забороняє додавання нових властивостей | так | так (старі можна видалити) |
Приклад: freeze vs seal
javascript
const user = { name: 'Богдан' };
Object.seal(user);
user.name = 'Олег'; // можна
delete user.name; // не можна
Object.freeze(user);
user.name = 'Макс'; // не можнаПІДСУМОК
| Властивість | Поведінка |
|---|---|
Object.freeze() | робить об'єкт повністю незмінним |
| не можна | додавати, видаляти або змінювати властивості |
| працює поверхнево | вкладені об'єкти залишаються змінюваними |
| перевірка | Object.isFrozen(obj) |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.