Reflect.set()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
TheReflect.set() static method is like theproperty accessor andassignment syntax, but as a function.
In this article
Try it
const object = {};Reflect.set(object, "foo", 42);console.log(object.foo);// Expected output: 42const array = ["duck", "duck", "duck"];Reflect.set(array, 2, "goose");console.log(array[2]);// Expected output: "goose"Syntax
Reflect.set(target, propertyKey, value)Reflect.set(target, propertyKey, value, receiver)Parameters
targetThe target object on which to set the property.
propertyKeyThe name of the property to set.
valueThe value to set.
receiverOptionalThe value of
thisprovided for the call to the setter forpropertyKeyontarget. If provided andtargetdoes not have a setter forpropertyKey, the property will be set onreceiverinstead.
Return value
ABoolean indicating whether or not setting the property was successful.
Exceptions
TypeErrorThrown if
targetis not an object.
Description
Reflect.set() provides the reflective semantic of aproperty access. That is,Reflect.set(target, propertyKey, value, receiver) is semantically equivalent to:
target[propertyKey] = value;Note that in a normal property access,target andreceiver would observably be the same object.
Reflect.set() invokes the[[Set]]object internal method oftarget.
Examples
>Using Reflect.set()
// Objectconst obj = {};Reflect.set(obj, "prop", "value"); // trueobj.prop; // "value"// Arrayconst arr = ["duck", "duck", "duck"];Reflect.set(arr, 2, "goose"); // truearr[2]; // "goose"// It can truncate an array.Reflect.set(arr, "length", 1); // truearr; // ["duck"]// With just one argument, propertyKey and value are "undefined".Reflect.set(obj); // trueReflect.getOwnPropertyDescriptor(obj, "undefined");// { value: undefined, writable: true, enumerable: true, configurable: true }Different target and receiver
When thetarget andreceiver are different,Reflect.set will use the property descriptor oftarget (to find the setter or determine if the property is writable), but set the property onreceiver.
const target = {};const receiver = {};Reflect.set(target, "a", 2, receiver); // true// target is {}; receiver is { a: 2 }const target = { a: 1 };const receiver = {};Reflect.set(target, "a", 2, receiver); // true// target is { a: 1 }; receiver is { a: 2 }const target = { set a(v) { this.b = v; },};const receiver = {};Reflect.set(target, "a", 2, receiver); // true// target is { a: [Setter] }; receiver is { b: 2 }Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-reflect.set> |