Skip to main content

Що робить 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

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.