Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить Object.freeze()?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)`Object.freeze()` - це вбудований метод JavaScript, який **"заморожує" об'єкт**, роблячи його **повністю незмінним**: не можна змінити, видалити або додати властивості. **Ключове:** заморожування поверхневе (shallow) - вкладені об'єкти залишаються змінюваними, якщо не заморозити їх окремо (рекурсивно).Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення`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)` |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.