JavaScript: Prevent Adding Property
What is Extensible?
Objects have internal slot βIsExtensibleβ that indicates if properties can added to the object.
Object's properties have attribute writable
that determines if a property can be changed, and the attribute configurable
determines if a property can be deleted,
[see Property Attributes]
Object's extensible attribute and property attributes together determine if property can be added to the object, deleted, or if their values can be modified.
Note: if a object is not extensible, but its parents may be, so people can add properties to the parent object, and your object may still get unexpected properties, because of inheritance.
What Objects Are Extensible?
- User-defined objects are extensible, by default.
- Standard objects (For example, Object, Array, Function, Date, etc) are extensible, by default.
- Host objects (for example,
windows.document
) may or may not be extensible.
const arr = [ Object, Array, Function , String , Date, RegExp ]; console.log( arr . every (x => Object.isExtensible(x) ) ); // true
[see Object Type]
Check If Object is Extensible
Object.isExtensible(obj)
[see Object.isExtensible]
Prevent Adding Properties
Object.preventExtensions(obj)
[see Object.preventExtensions]
Prevent Adding/Deleting Properties
Object.seal(obj)
[see Object.seal]
Object.isSealed(obj)
[see Object.isSealed]
Prevent Adding/Deleting/Writing Properties
Object.freeze(obj)
[see Object.freeze]
Object.isFrozen(obj)
[see Object.isFrozen]