Baseline Widely available
The Reflect.set()
static method is like the property accessor and assignment syntax, but as a function.
const object1 = {};
Reflect.set(object1, "property1", 42);
console.log(object1.property1);
// Expected output: 42
const 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
Optional
The value of this
provided for the call to the setter for propertyKey
on target
. If provided and target
does not have a setter for propertyKey
, the property will be set on receiver
instead.
A Boolean
indicating whether or not setting the property was successful.
TypeError
Thrown if target
is not an object.
Reflect.set()
provides the reflective semantic of a property access. That is, Reflect.set(target, propertyKey, value, receiver)
is semantically equivalent to:
target[propertyKey] = value;
Note that in a normal property access, target
and receiver
would observably be the same object.
Reflect.set()
invokes the [[Set]]
object internal method of target
.
// Object
const obj = {};
Reflect.set(obj, "prop", "value"); // true
obj.prop; // "value"
// Array
const arr = ["duck", "duck", "duck"];
Reflect.set(arr, 2, "goose"); // true
arr[2]; // "goose"
// It can truncate an array.
Reflect.set(arr, "length", 1); // true
arr; // ["duck"]
// With just one argument, propertyKey and value are "undefined".
Reflect.set(obj); // true
Reflect.getOwnPropertyDescriptor(obj, "undefined");
// { value: undefined, writable: true, enumerable: true, configurable: true }
Different target and receiver
When the target
and receiver
are different, Reflect.set
will use the property descriptor of target
(to find the setter or determine if the property is writable), but set the property on receiver
.
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 Browser compatibility See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4