protection
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.seal(obj) Parameters
| Parameter | Purpose |
|---|---|
| obj | The object to seal |
| returns | The same (now sealed) object |
Examples
const o = Object.seal({ a: 1 });
o.a = 2;
console.log(o.a); Logs 2 — existing values are still writable
const o = Object.seal({ a: 1 });
try { o.b = 2; } catch (e) {}
console.log(o.b); Logs undefined — adding new properties fails
const o = Object.seal({ a: 1 });
try { delete o.a; } catch (e) {}
console.log(o.a); Logs 1 — deletions fail because properties are non-configurable
console.log(Object.isSealed(Object.seal({}))); Logs true
Gotcha
Weaker than freeze — sealed objects can still have their existing writable values reassigned. Like freeze, it is shallow and does not affect nested objects.
Related methods
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.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.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.
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.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.