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.

Die Reflect.set() statische Methode ist vergleichbar mit dem Property Accessor und der Zuweisungs-Syntax, jedoch in Form einer Funktion.

Probieren Sie es aus

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

js
Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)

Parameter

target

Das Zielobjekt, auf dem die Eigenschaft gesetzt wird.

propertyKey

Der Name der Eigenschaft, die gesetzt werden soll.

value

Der zu setzende Wert.

receiver Optional

Der Wert von this, der für den Aufruf des Setters für propertyKey auf target bereitgestellt wird. Falls angegeben und target keinen Setter für propertyKey besitzt, wird die Eigenschaft stattdessen auf receiver gesetzt.

Rückgabewert

Ein Boolean, der angibt, ob das Setzen der Eigenschaft erfolgreich war.

Ausnahmen

TypeError

Wird ausgelöst, wenn target kein Objekt ist.

Beschreibung

Reflect.set() bietet die reflexive Semantik eines Property Access. Das heißt, Reflect.set(target, propertyKey, value, receiver) ist semantisch äquivalent zu:

js
target[propertyKey] = value;

Beachten Sie, dass bei einem normalen Property Access target und receiver beobachtbar dasselbe Objekt wären.

Reflect.set() ruft die [[Set]] interne Objektmethode von target auf.

Beispiele

Verwendung von Reflect.set()

js
// 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 }

Unterschiedliches Ziel und Empfänger

Wenn target und receiver unterschiedlich sind, verwendet Reflect.set den Property Descriptor von target (zum Finden des Setters oder zum Bestimmen, ob die Eigenschaft beschreibbar ist), setzt die Eigenschaft jedoch auf receiver.

js
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 }

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-reflect.set

Browser-Kompatibilität

Siehe auch