JS: Prevent Adding Property
What's Extensible?
Objects have internal slot “IsExtensible” that indicates if properties can added to the object.
(Note, in ES5.1 (year 2011), this was called “Extensible”. It's renamed to “IsExtensible” in ES2015.)
ECMAScript® 2016 Language Specification#table-5
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 JS: Property Attributes, writable, enumerable, configurable]
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, …) 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 JS: Object Type]
Check If Object is Extensible
Object.isExtensible(obj)
[see JS: Object.isExtensible]
Prevent Adding Properties
Object.preventExtensions(obj)
[see JS: Object.preventExtensions]
Prevent Adding/Deleting Properties
Object.seal(obj)
[see JS: Object.seal]
Object.isSealed(obj)
[see JS: Object.isSealed]
Prevent Adding/Deleting/Writing Properties
Object.freeze(obj)
[see JS: Object.freeze]
Object.isFrozen(obj)
[see JS: Object.isFrozen]
JS Object and Inheritance
If you have a question, put $5 at patreon and message me.