JavaScript

Object.isExtensible()メソッド

 編集:2022.07.28 by T.A.

オブジェクトが拡張可能であるか(新しいプロパティを追加することができるかどうか)を判定します。

Object.isExtensible(obj)
obj チェックするオブジェクトです。
戻り値

Boolean で、与えられたオブジェクトが拡張可能であるかどうかを示します。

解説

オブジェクトは既定では拡張可能です。つまり、新しいプロパティの追加が可能であり、(__proto__ のプロパティに対応しているエンジンでは)__proto__ プロパティを変更することができます。オブジェクトは Object.preventExtensions()Object.seal()Object.freeze() の何れかを用いる事で拡張不能に設定する事が可能です。

Object.isExtensible の使用
// 新規のオブジェクトは拡張可能
var empty = {};
D=Object.isExtensible(empty);	//= ===true

// その設定は変える事が可能
Object.preventExtensions(empty);
D=Object.isExtensible(empty);	//= === false

// seal メソッドで封印されたオブジェクトは拡張不可と定義される
var sealed = Object.seal({});
D=Object.isExtensible(sealed);	//= === false

// freeze メソッドで凍結されたオブジェクトも拡張不可と定義される
var frozen = Object.freeze({});
D=Object.isExtensible(frozen);	//= === false
オブジェクト以外の型強制

ES5 では、このメソッドの引数がオブジェクトではない場合(プリミティブの場合)、TypeError が発生します。ES2015 以降では、オブジェクトでない引数は、それが拡張不可能な通常のオブジェクトであるかのように扱われ、単に false を返します。

D=Object.isExtensible(1);	// TypeError: 1 is not an object(ES5 code)
D=Object.isExtensible(1);	//=false。(ES2015 code)

テスト