Introduced in JavaScript 1.8.5
Summary
Determine if an object is frozen.
Method of Object |
|
---|---|
Implemented in | JavaScript 1.8.5 |
ECMAScript Edition | ECMAScript 5th Edition |
Syntax
Object.isFrozen(obj)
Parameters
- obj
- The object which should be checked.
Description
An object is frozen if and only if it is not extensible, all its properties are non-configurable, and all its data properties (that is, properties which are not accessor properties with getter or setter components) are non-writable.
Examples
// A new object is extensible, so it is not frozen. assert(Object.isFrozen({}) === false); // An empty object which is not extensible is vacuously frozen. var vacuouslyFrozen = Object.preventExtensions({}); assert(Object.isFrozen(vacuouslyFrozen) === true); // A new object with one property is also extensible, ergo not frozen. var oneProp = { p: 42 }; assert(Object.isFrozen(oneProp) === false); // Preventing extensions to the object still doesn't make it frozen, // because the property is still configurable (and writable). Object.preventExtensions(oneProp); assert(Object.isFrozen(oneProp) === false); // ...but then deleting that property makes the object vacuously frozen. delete oneProp.p; assert(Object.isFrozen(oneProp) === true); // A non-extensible object with a non-writable but still configurable property is not frozen. var nonWritable = { e: "plep" }; Object.preventExtensions(nonWritable); Object.defineProperty(nonWritable, "e", { writable: false }); // make non-writable assert(Object.isFrozen(nonWritable) === false); // Changing that property to non-configurable then makes the object frozen. Object.defineProperty(nonWritable, "e", { configurable: false }); // make non-configurable assert(Object.isFrozen(nonWritable) === true); // A non-extensible object with a non-configurable but still writable property also isn't frozen. var nonConfigurable = { release: "the kraken!" }; Object.preventExtensions(nonConfigurable); Object.defineProperty(nonConfigurable, "release", { configurable: false }); assert(Object.isFrozen(nonConfigurable) === false); // Changing that property to non-writable then makes the object frozen. Object.defineProperty(nonConfigurable, "release", { writable: false }); assert(Object.isFrozen(nonConfigurable) === true); // A non-extensible object with a configurable accessor property isn't frozen. var accessor = { get food() { return "yum"; } }; Object.preventExtensions(accessor); assert(Object.isFrozen(accessor) === false); // ...but make that property non-configurable and it becomes frozen. Object.defineProperty(accessor, "food", { configurable: false }); assert(Object.isFrozen(accessor) === true); // But the easiest way for an object to be frozen is if Object.freeze has been called on it. var frozen = { 1: 81 }; assert(Object.isFrozen(frozen) === false); Object.freeze(frozen); assert(Object.isFrozen(frozen) === true); // By definition, a frozen object is non-extensible. assert(Object.isExtensible(frozen) === false); // Also by definition, a frozen object is sealed. assert(Object.isSealed(frozen) === true);
Browser compatibility
Feature | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 4 (2.0) | 6 | 9 | Not supported | 5.1 |
Feature | Firefox Mobile (Gecko) | Android | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
Basic support | ? | ? | ? | ? | ? |
Based on Kangax's compat table.