Reflect.set()
BaselineWidely 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.
Try it
const object1 = {};Reflect.set(object1, "property1", 42);console.log(object1.property1);// Expected output: 42const array1 = ["duck", "duck", "duck"];Reflect.set(array1, 2, "goose");console.log(array1[2]);// Expected output: "goose"
Syntax
Reflect.set(target, propertyKey, value)Reflect.set(target, propertyKey, value, receiver)
Parameters
target
The target object on which to set the property.
propertyKey
The name of the property to set.
value
The value to set.
receiver
OptionalThe value of
this
provided for the call to the setter forpropertyKey
ontarget
. If provided andtarget
does not have a setter forpropertyKey
, the property will be set onreceiver
instead.
Return value
ABoolean
indicating whether or not setting the property was successful.
Exceptions
TypeError
Thrown if
target
is 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 |