--- title: Object.isFrozen() slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen tags: - ECMAScript 5 - JavaScript - Об'єкт - метод - розширюваний translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen ---
Метод Object.isFrozen()
визначає, чи є об'єкт {{jsxref("Object.freeze()", "замороженим", "", 1)}}.
Object.isFrozen(obj)
obj
{{jsxref("Boolean", "Булеве значення")}}, що вказує, чи є наданий об'єкт замороженим.
Об'єкт є замороженим тільки тоді, коли він не є {{jsxref("Object.isExtensible()", "розширюваним", "", 1)}}, всі його властивості недоступні для налаштування, і всі його властивості-значення (тобто, властивості, які не є властивостями-аксесорами, що мають гетер або сетер) недоступні для запису.
// Новий об'єкт є розширюваним, отже, він не заморожений Object.isFrozen({}); // === false // Пустий об'єкт, котрий є нерозширюваним, // є порожньо замороженим. var vacuouslyFrozen = Object.preventExtensions({}); Object.isFrozen(vacuouslyFrozen); // === true // Новий об'єкт з однією властивістю є також розширюваним, // отже, не заморожений. var oneProp = { p: 42 }; Object.isFrozen(oneProp); // === false // Припинення розширювання об'єкту не робить його замороженим, // тому що властивість досі доступна // для налаштування (та запису). Object.preventExtensions(oneProp); Object.isFrozen(oneProp); // === false // ...але видалення цієї властивості робить об'єкт // порожньо замороженим. delete oneProp.p; Object.isFrozen(oneProp); // === true // Нерозширюваний об'єкт з властивістю, недоступною для запису, // але доступною для налаштування, не є замороженим. var nonWritable = { e: 'plep' }; Object.preventExtensions(nonWritable); Object.defineProperty(nonWritable, 'e', { writable: false }); // зробити властивість недоступною для запису Object.isFrozen(nonWritable); // === false // Якщо зробити цю властивість недоступною для налаштування, // тоді об'єкт буде замороженим. Object.defineProperty(nonWritable, 'e', { configurable: false }); // зробити властивість недоступною для налаштування Object.isFrozen(nonWritable); // === true // Нерозширюваний об'єкт з властивістю, недоступною // для налаштування, але доступною для запису, також не є замороженим. var nonConfigurable = { release: 'the kraken!' }; Object.preventExtensions(nonConfigurable); Object.defineProperty(nonConfigurable, 'release', { configurable: false }); Object.isFrozen(nonConfigurable); // === false // Якщо зробити цю властивість недоступною для запису, // тоді об'єкт буде заморожений. Object.defineProperty(nonConfigurable, 'release', { writable: false }); Object.isFrozen(nonConfigurable); // === true // Нерозширюваний об'єкт з властивістю-аксесором, // доступною для налаштування, не є замороженим. var accessor = { get food() { return 'ням'; } }; Object.preventExtensions(accessor); Object.isFrozen(accessor); // === false // ...але якщо зробити цю властивість недоступною для налаштування, // тоді об'єкт буде замороженим. Object.defineProperty(accessor, 'food', { configurable: false }); Object.isFrozen(accessor); // === true // Але найпростіший спосіб зробити об'єкт замороженим - // це викликати на ньому метод Object.freeze. var frozen = { 1: 81 }; Object.isFrozen(frozen); // === false Object.freeze(frozen); Object.isFrozen(frozen); // === true // За визначенням, заморожений об'єкт є нерозширюваним. Object.isExtensible(frozen); // === false // Також, за визначенням, заморожений об'єкт є запечатаним. Object.isSealed(frozen); // === true
У ES5, якщо аргументом цього методу є не об'єкт (примітив), це спричинить {{jsxref("TypeError")}}. У ES2015 аргумент, що не є об'єктом, сприйматиметься як звичайний заморожений об'єкт, метод просто поверне true
.
Object.isFrozen(1); // TypeError: 1 is not an object (код ES5) Object.isFrozen(1); // true (код ES2015)
Специфікація | Статус | Коментар |
---|---|---|
{{SpecName('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}} | {{Spec2('ES5.1')}} | Початкове визначення. Реалізоване у JavaScript 1.8.5. |
{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-object.isfrozen', 'Object.isFrozen')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Object.isFrozen")}}