Reflect.set() - JavaScript | MDN

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2016年9月.

Reflect.set() は静的メソッドで、プロパティアクセサーおよび代入構文に似ていますが、関数として実装されています。

試してみましょう

const object = {};
Reflect.set(object, "foo", 42);

console.log(object.foo);
// 予想される結果: 42

const array = ["duck", "duck", "duck"];
Reflect.set(array, 2, "goose");

console.log(array[2]);
// 予想される結果: "goose"

構文

js

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

引数

target

プロパティを設定する対象のオブジェクト。

propertyKey

設定するプロパティ名。

value

設定する値。

receiver 省略可

targetpropertyKeyに対するセッター呼び出しに指定されるthisの値です。指定され、かつtargetpropertyKeyのセッターを持たない場合、代わりにreceiverにプロパティが設定されます。

返値

プロパティが成功裏に設定できたかどうかを示す論理値 (Boolean)。

例外

TypeError

target がオブジェクトではない場合に発生します。

解説

Reflect.set() は、プロパティアクセス の反射的意味づけを提供します。つまり、Reflect.set(target, propertyKey, value, receiver) は意味づけ的に次のものと同等です。

js

target[propertyKey] = value;

通常のプロパティアクセスでは、targetreceiver は明らかに同一のオブジェクトであることに注意してください。

Reflect.set() は、target[[Set]] オブジェクト内部メソッド を呼び出します。

Reflect.set() の使用

js

// オブジェクト
const obj = {};
Reflect.set(obj, "prop", "value"); // true
obj.prop; // "value"

// 配列
const arr = ["duck", "duck", "duck"];
Reflect.set(arr, 2, "goose"); // true
arr[2]; // "goose"

// 配列を切り詰められる。
Reflect.set(arr, "length", 1); // true
arr; // ["duck"]

// 引数が1つだけだと、プロパティキーと値は "undefined" になる。
Reflect.set(obj); // true
Reflect.getOwnPropertyDescriptor(obj, "undefined");
// { value: undefined, writable: true, enumerable: true, configurable: true }

target と receiver の違い

targetreceiver が異なる場合、Reflect.settarget のプロパティ記述子を使用します(セッターを探したり、プロパティが書き込み可能かどうかの判定をしたりするため)。ただし、プロパティの設定は receiver に対して行います。

js

const target = {};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target は {}; receiver は { a: 2 }

const target = { a: 1 };
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target は { a: 1 }; receiver は { a: 2 }

const target = {
  set a(v) {
    this.b = v;
  },
};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target は { a: [Setter] }; receiver は { b: 2 }

仕様書

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

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.