Now that we know how to check if a property is enumerable, let's learn how to define enumerable properties. To do this we're going to use Object.defineProperties
and Object.defineProperty
.
Object.defineProperty
First, let's take an existing, empty object.
let obj = {};
Typically, we could define properties like this:
obj.someProp = 'someValue';
But if we wanted to specify internal flags (like enumerable
) for this property, we can do so using defineProperty
.
Object.defineProperty(obj, 'someProp', {
value: 'someValue',
enumerable: true
});
Now, the above example is unnecessary. It accomplished the same thing as normal property assignment because the default value for enumerable
is true
anyways. But I wanted to show how the enumerable
property would be set, or unset.
Let's create a property that is not enumerable.
Object.defineProperty(obj, 'nonEnumerableProp', {
value: 'someValue',
enumerable: false
});
Now, let's prove our work:
obj.propertyIsEnumerable('someProp') // => true
obj.propertyIsEnumerable('nonEnumerableProp') // => false
Object.defineProperties
We can also define more than one property at a time using defineProperties
. Notice it takes a different set of arguments.
Object.defineProperties(obj, {
'someProp': {
value: 'someValue',
enumerable: true
},
'nonEnumerableProp': {
value: 'someValue',
enumerable: false
}
});