Object.isFrozen()

Метод Object.isFrozen() визначає, чи є об'єкт замороженим.

Синтаксис

Object.isFrozen(obj)

Параметри

obj
Об'єкт для перевірки.

Повертає

Булеве значення, що вказує, чи є наданий об'єкт замороженим.

Опис

Об'єкт є замороженим тільки тоді, коли він не є розширюваним, всі його властивості недоступні для налаштування, і всі його властивості-значення (тобто, властивості, які не є властивостями-аксесорами, що мають гетер або сетер) недоступні для запису.

Приклади

// Новий об'єкт є розширюваним, отже, він не заморожений
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, якщо аргументом цього методу є не об'єкт (примітив), це спричинить TypeError. У ES2015 аргумент, що не є об'єктом, сприйматиметься як звичайний заморожений об'єкт, метод просто поверне true.

Object.isFrozen(1);
// TypeError: 1 is not an object (код ES5)

Object.isFrozen(1);
// true                          (код ES2015)

Специфікації

Специфікація Статус Коментар
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.isFrozen' in that specification.
Standard Початкове визначення. Реалізоване у JavaScript 1.8.5.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.isFrozen' in that specification.
Standard
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.isFrozen' in that specification.
Draft

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
isFrozenChrome Full support 6Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support

Дивіться також