Reflect.isExtensible()
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.isExtensible() は静的メソッドで、これは Object.isExtensible() に似ています。これはオブジェクトが拡張可能であるか(オブジェクトに追加された新しいプロパティを持てるかどうか)を判断します。
試してみましょう
const object1 = {};
console.log(Reflect.isExtensible(object1));
// 予想される結果: true
Reflect.preventExtensions(object1);
console.log(Reflect.isExtensible(object1));
// 予想される結果: false
const object2 = Object.seal({});
console.log(Reflect.isExtensible(object2));
// 予想される結果: false
構文
Reflect.isExtensible(target)
引数
target-
拡張できるかどうかをチェックする対象のオブジェクト。
返値
対象が拡張可能かどうかを示す論理値 (Boolean)。
例外
TypeError-
targetがオブジェクトではない場合に発生します。
解説
Reflect.isExtensible() は、オブジェクトが拡張可能かどうかを調べる反射的な意味づけを提供します。Object.isExtensible() との唯一の違いは、オブジェクト以外の対象の処理方法です。Reflect.isExtensible() は対象がオブジェクトでない場合に TypeError を発生しますが、Object.isExtensible() はオブジェクト以外の対象に対して常に false を返します。
Reflect.isExtensible() は、target の [[IsExtensible]] オブジェクト内部メソッド を呼び出します。
例
>Reflect.isExtensible() の使用
Object.isExtensible() も参照してください。
// 新しいオブジェクトは拡張可能。
const empty = {};
Reflect.isExtensible(empty); // true
// ...しかし、変更できます
Reflect.preventExtensions(empty);
Reflect.isExtensible(empty); // false
// 封印されたオブジェクトは拡張できないように定義される。
const sealed = Object.seal({});
Reflect.isExtensible(sealed); // false
// 凍結されたオブジェクトも拡張できないように定義される。
const frozen = Object.freeze({});
Reflect.isExtensible(frozen); // false
Object.isExtensible() との違い
このメソッドへの最初の引数がオブジェクトではなかった (プリミティブであった) 場合、これは TypeError を引き起こします。Object.isExtensible() だと、オブジェクトではない最初の引数はオブジェクトに強制的に変換されます。
Reflect.isExtensible(1);
// TypeError: 1 はオブジェクトではない
Object.isExtensible(1);
// false
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-reflect.isextensible> |