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 funktioniert ähnlich wie die Property-Accessor und Zuweisungs Syntax, jedoch als 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 werden soll.

propertyKey

Der Name der zu setzenden Eigenschaft.

value

Der zu setzende Wert.

receiver Optional

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

Rückgabewert

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

Ausnahmen

TypeError

Wird ausgelöst, wenn target kein Objekt ist.

Beschreibung

Reflect.set() stellt die reflexive Semantik eines Property-Zugriffs bereit. Das bedeutet, Reflect.set(target, propertyKey, value, receiver) ist semantisch gleichwertig mit:

js
target[propertyKey] = value;

Es ist zu beachten, dass bei einem normalen Property-Zugriff target und receiver erkennbar dasselbe Objekt sind.

Reflect.set() ruft die [[Set]] interne Methoden eines Objekts 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, wird Reflect.set den Eigenschaftsbeschreiber von target verwenden (um den Setter zu finden oder festzustellen, ob die Eigenschaft schreibbar ist), aber die Eigenschaft auf receiver setzen.

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® 2026 Language Specification
# sec-reflect.set

Browser-Kompatibilität

Siehe auch