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 (ECMA-262)
The definition of 'Object.isFrozen' in that specification.
Living Standard

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

BCD tables only load in the browser

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