Skip to content
masterclassBuddyTech Buzz5 fresh blogs · 5:00 AM IST

JS Puzzles · Const

Property descriptors

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.

How it works

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.

Syntax

Object.getOwnPropertyDescriptor(obj, propertyName)
Object.defineProperty(obj, propertyName, descriptor)
Object.defineProperties(obj, descriptors)
Object.getOwnPropertyDescriptors(obj)

Parameters

NameTypeDescription
objobjectThe object whose own property is inspected or modified.
propertyNamestring or symbolThe property name passed to the descriptor operation.
descriptorproperty descriptorThe descriptor object containing the value and applicable flags.

Returns

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.

Key points

  • A data property can have writable, enumerable, and configurable flags in addition to its value.
  • writable controls whether assignment can change a property's value.
  • enumerable controls whether the property appears in enumeration such as for...in.
  • configurable controls deletion and later descriptor changes.
  • Use Object.getOwnPropertyDescriptor() to inspect one property's complete descriptor.
  • Object.defineProperty() creates a property or updates an existing property's descriptor.
  • Object.defineProperties() applies descriptors to multiple properties in one operation.
  • Object.getOwnPropertyDescriptors() retrieves descriptors for all own properties.

Common mistakes

  • When defining a new property, any omitted descriptor flag becomes false.
  • Setting configurable to false prevents deleting the property or changing its attributes later.

Example: Inspect and restrict a 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); // Ada

The descriptor makes name read-only while keeping it enumerable and non-configurable.

When to use it

Inspect property behavior

Inspect whether a property is writable, enumerable, or configurable before modifying an object.

Control mutability and visibility

Create read-only or non-enumerable object properties.

Define multiple properties

Apply several property definitions during object setup.

Preserve property semantics

Copy object properties while preserving their descriptors.

  • Object.getOwnPropertyDescriptor
  • Object.defineProperty
  • Object.defineProperties
  • Object.getOwnPropertyDescriptors
  • writable
  • enumerable
  • configurable
  • property accessors

Source: Property flags and descriptors - The Modern JavaScript Tutorial. Checked 2026-10-15.