protection
Object.isFrozen
Returns true if the object is frozen — non-extensible, and every own property is non-configurable and (if a data property) non-writable. Primitives are considered frozen.
Object.isFrozen(obj) Parameters
| Parameter | Purpose |
|---|---|
| obj | The value to test |
| returns | Boolean — true if frozen |
Examples
console.log(Object.isFrozen({})); Logs false — plain objects are extensible
console.log(Object.isFrozen(Object.freeze({ a: 1 }))); Logs true
console.log(Object.isFrozen(42)); Logs true — primitives are treated as frozen
const o = Object.preventExtensions({});
console.log(Object.isFrozen(o)); Logs true — an empty non-extensible object is trivially frozen
Gotcha
Empty non-extensible objects report as frozen because there are no properties to violate the rule. Does NOT recurse — returns true even if nested objects are mutable.
Related methods
Object.freeze
Freezes an object: new properties cannot be added, existing properties cannot be removed, and their values, writability, and configurability cannot be changed. Returns the same object.
Object.isSealed
Returns true if the object is sealed — non-extensible and all own properties are non-configurable. Frozen objects are always sealed; primitives are considered sealed.
Object.isExtensible
Returns true if new properties can be added to the object. Sealed, frozen, and preventExtensions'd objects all return false; primitives always return false.
Object.seal
Seals an object: prevents new properties from being added and marks all existing properties as non-configurable. Existing writable properties can still be reassigned.
Object.preventExtensions
Prevents new properties from being added to an object, but existing properties can still be modified, deleted, or reconfigured. The weakest of the three protection levels.