The static Reflect.defineProperty() method is like Object.defineProperty() but returns a Boolean.


Reflect.defineProperty(target, propertyKey, attributes)


The target object on which to define the property.
The name of the property to be defined or modified.
The attributes for the property being defined or modified.

Return value

A Boolean indicating whether or not the property was successfully defined.


A TypeError, if target is not an Object.


The Reflect.defineProperty method allows precise addition to or modification of a property on an object. For more details, see the Object.defineProperty which is similar.

One key difference: Object.defineProperty returns the object or throws a TypeError if the property has not been successfully defined. Reflect.defineProperty, however, returns a Boolean indicating whether or not the property was successfully defined.


Using Reflect.defineProperty()

let obj = {}
Reflect.defineProperty(obj, 'x', {value: 7})  // true
obj.x                                         // 7

Checking if property definition has been successful

With Object.defineProperty, which returns an object if successful, or throws a TypeError otherwise, you would use a try...catch block to catch any error that occurred while defining a property.

Because Reflect.defineProperty returns a Boolean success status, you can just use an if...else block here:

if (Reflect.defineProperty(target, property, attributes)) {
  // success
} else {
  // failure


Browser compatibility

BCD tables only load in the browser

See also