JavaScript метод isFrozen()

JavaScript Object

Определение и применение

JavaScript метод isFrozen() позволяет вернуть логическое значение, которое определяет является ли объект нерасширяемым с недоступными для настройки и изменения свойствами.

Под нерасширяемым объектом стоит понимать тот объект в котором недоступно добавление в него новых собственных свойств.

Под ненастраиваемыми свойствами стоит понимать те, атрибут configurable которых имеет значение false, в этом случае удаление такого свойства из содержащего его объекта, а также в дальнейшем изменение дескриптора этого свойства запрещается. Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.

Кроме того, метод isFrozen() проверяет соответствует ли значение атрибута writable для каждого собственного (неунаследованного) свойства значению false (изменение собственных свойств объекта с помощью оператора присваивания не допускается). Это является его основным отличием от метода isSealed(), который не проводит подобных проверок.


Чтобы сделать объект нерасширяемым и с недоступными для настройки и изменения свойствами вы можете воспользоваться методом freeze().


Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
isFrozen()6.04.012.05.19.0Да

JavaScript синтаксис:

Object.isFrozen( obj );

Версия JavaScript

ECMAScript 5.1 (реализовано в JavaScript 1.8.5)

Значения параметров

ПараметрОписание
objЦелевой объект, который проверяется. Обязательное значение.

Исключения

Тип исключенияОписание
TypeErrorВозникает в том случае, если значение параметра, определяющее целевой объект не является объектом. Начиная с версии ECMAScript 6 параметр, который не является объектом будет сначала приведён к объекту.

Пример использования

// инициализируем переменную, содержащую объект
let obj = {
    a: 1,
    b: 2
};

// определяем является ли объект "замороженым"
Object.isFrozen( obj ); // false

// "замораживаем" объект
Object.freeze( obj );

// определяем является ли объект "замороженым"
Object.isFrozen( obj ); // true

В этом примере мы инициализировали переменную, содержащую объект и с помощью метода isFrozen() проверяем является ли объект нерасширяемым с недоступными для настройки и изменения свойствами. После этого мы с помощью метода freeze() "замораживаем" объект и снова используем метод isFrozen().

В следующем примере мы рассмотрим как сделать объект нерасширяемым и с недоступными для настройки и изменения свойствами без использования метода freeze().

// инициализируем переменную, содержащую объект
let obj = {
    a: 1
};

// определяем является ли объект "замороженым"
Object.isFrozen( obj ); // false

// изменяем в объекте свойство данных
Object.defineProperty( obj, "a", { 
    configurable: false,    // устанавливаем, что удаление свойства не допускается, а также не допускается изменение дескриптора этого свойства 
	writable: false // изменение свойства объекта с помощью оператора присваивания не допускается 
});
Object.preventExtensions( obj ); // делаем объект нерасширяемым

// определяем является ли объект "замороженым"
Object.isFrozen( obj ); // true

В этом примере мы инициализируем переменную, содержащую объект, с помощью метода defineProperty() изменяем в этом объекте свойство данных "a" (устанавливаем, что удаление свойства не допускается, а также не допускается изменение дескриптора этого свойства, и изменение свойства объекта с помощью оператора присваивания не допускается.

После этого с помощью метода preventExtensions() делаем объект нерасширяемым (недоступно добавление в него новых собственных свойств). После этого с помощью метода isFrozen() мы проверяем является ли наш объект нерасширяемым с недоступными для настройки и изменения свойствами.

JavaScript Object