- Published on
Object Properties
4 mins
- Authors
- Name
- Juleshwar Babu
 
 
Table Of Contents
Source Link: https://javascript.info/object-properties
- There are two kinds of object properties.- The first kind is data properties. All properties that we’ve been using until now were data properties.let obj = { foo: 10 } obj.foo // 10 -> data property
- The second type is accessor property. They are essentially functions that execute on getting and setting a value, but look like regular properties to an external code.
 
- The first kind is data properties. All properties that we’ve been using until now were data properties.
Property Flags and Descriptors
- Link: https://javascript.info/property-descriptors
- Object properties, besides a value, have three special properties so-called “flags”- writable– if- true, the value can be changed, otherwise it’s read-only.
- enumerable– if- true, then listed in loops, otherwise not listed.
- configurable– if- true, the property can be deleted and these attributes can be modified, otherwise not.
 
- Object.getOwnPropertyDescriptor(obj, propName) allows us to see these flags which are generally hidden away. All these three flags are true for props we normally set.
- Using Object.definePropertywe can edit these flags for properties. Any flag not mentioned while defining a property is consideredfalseby default
- Making a property non-configurable is a one-way road. We cannot change it back with defineProperty. The only other change we can make to such a property is make itswritableflag fromtruetofalse
- Other handy property configurators- Object.preventExtensions(obj): Forbids the addition of new properties to the object.
- Object.seal(obj): Forbids adding/removing of properties. Sets configurable: falsefor all existing properties.
- Object.freeze(obj): Forbids adding/removing/changing of properties. Sets configurable: false, writable: falsefor all existing properties.
 
Property Getters and Setters
- Link: https://javascript.info/property-accessors - let obj = { get propName() { // getter, the code executed on getting obj.propName }, set propName(value) { // setter, the code executed on setting obj.propName = value } };
- Descriptors for accessor properties are different from those for data properties. - get– a function without arguments, that works when a property is read,
- set– a function with one argument, that is called when the property is set,
- enumerable– same as for data properties… if false, property doesn’t show up in- forloops
- configurable– same as for data properties... if- true, the property can be deleted and these descriptors can be modified, otherwise not.
 
- A property can either have a value descriptor or get/set descriptors. Not both at the same time. 
Content Updates
- 2023-09-08 - init