By default, all of these three property attributes are set to true. When writable attribute is true, then we can update the value of the property. When enumerable attribute is set to true, then the property becomes enumerable; for example, the for/in loop skips non-enumerable properties and so if we set the enumerable attribute to false and run the for/in loop, then we would not see that property in the loop. When configurable attribute is set to true, then we can configure the attributes of that property; if it is set to false, then we cannot change the writable or enumerable attributes.
Together, the extensive attribute of an object and the three attributes of a property, provide four types of attributes; as shown in the above figure, the extensible attribute is object-level, where as the writable, enumerable, and configurable are for each property.
To access the value of object's extensible attribute, we can use the Object.isExtensible() method; this method returns the current value (boolean) of this attribute. To access the values of three property attributes, we can use the Object.getOwnPropertyDescriptor() method. This method returns the current value (boolean) of the three attributes: writable, enumerable, and configurable.
Here is a simple simple example that retrieves all four attribute types for an object ("objFable"). For accessing property attributes, it uses the "dragon" property of the "objFable" object.
The output (provided below) confirms that by default all three attributes of each properties and the object-level extensible attribute are true. Note that along with three attributes, Object.getOwnPropertyDescriptor() also returns the value of the specified property.