このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

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

構文

js
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() も参照してください。

js
// 新しいオブジェクトは拡張可能。
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() だと、オブジェクトではない最初の引数はオブジェクトに強制的に変換されます。

js
Reflect.isExtensible(1);
// TypeError: 1 はオブジェクトではない

Object.isExtensible(1);
// false

仕様書

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

ブラウザーの互換性

関連情報