JavaScript метод isFrozen()
JavaScript ObjectОпределение и применение
JavaScript метод isFrozen() позволяет вернуть логическое значение, которое определяет является ли объект нерасширяемым с недоступными для настройки и изменения свойствами.
Под нерасширяемым объектом стоит понимать тот объект в котором недоступно добавление в него новых собственных свойств.
Под ненастраиваемыми свойствами стоит понимать те, атрибут configurable которых имеет значение false, в этом случае удаление такого свойства из содержащего его объекта, а также в дальнейшем изменение дескриптора этого свойства запрещается. Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
Кроме того, метод isFrozen() проверяет соответствует ли значение атрибута writable для каждого собственного (неунаследованного) свойства значению false (изменение собственных свойств объекта с помощью оператора присваивания не допускается). Это является его основным отличием от метода isSealed(), который не проводит подобных проверок.
Чтобы сделать объект нерасширяемым и с недоступными для настройки и изменения свойствами вы можете воспользоваться методом freeze().
Поддержка браузерами
Метод | ![]() Chrome | ![]() Firefox | ![]() Opera | ![]() Safari | ![]() IExplorer | ![]() Edge |
---|---|---|---|---|---|---|
isFrozen() | 6.0 | 4.0 | 12.0 | 5.1 | 9.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