Inspect property behavior
Inspect whether a property is writable, enumerable, or configurable before modifying an object.
JS Puzzles · Const
Property descriptors describe an object's property value and its writable, enumerable, and configurable flags. JavaScript provides methods to inspect descriptors and create or update properties with precise behavior.
A property descriptor records a property's value and control flags. Object.getOwnPropertyDescriptor() reads those details, while Object.defineProperty() creates or updates a property using a descriptor; omitted flags default to false when a new property is created.
Object.getOwnPropertyDescriptor(obj, propertyName)
Object.defineProperty(obj, propertyName, descriptor)
Object.defineProperties(obj, descriptors)
Object.getOwnPropertyDescriptors(obj)| Name | Type | Description |
|---|---|---|
obj | object | The object whose own property is inspected or modified. |
propertyName | string or symbol | The property name passed to the descriptor operation. |
descriptor | property descriptor | The descriptor object containing the value and applicable flags. |
Object.getOwnPropertyDescriptor() returns a property descriptor object containing the property's value and all flags. Object.defineProperty() returns the object after defining or updating the property.
const user = { name: "Ada" };
Object.defineProperty(user, "name", {
writable: false,
enumerable: true,
configurable: false,
});
console.log(Object.getOwnPropertyDescriptor(user, "name"));
user.name = "Grace"; // Ignored in non-strict mode
console.log(user.name); // AdaThe descriptor makes name read-only while keeping it enumerable and non-configurable.
Inspect whether a property is writable, enumerable, or configurable before modifying an object.
Create read-only or non-enumerable object properties.
Apply several property definitions during object setup.
Copy object properties while preserving their descriptors.
Object.getOwnPropertyDescriptorObject.definePropertyObject.definePropertiesObject.getOwnPropertyDescriptorswritableenumerableconfigurableproperty accessors