→
オブジェクトが拡張可能であるか(新しいプロパティを追加することができるかどうか)を判定します。
obj | チェックするオブジェクトです。 |
---|
Boolean で、与えられたオブジェクトが拡張可能であるかどうかを示します。
オブジェクトは既定では拡張可能です。つまり、新しいプロパティの追加が可能であり、(__proto__ のプロパティに対応しているエンジンでは)__proto__ プロパティを変更することができます。オブジェクトは Object.preventExtensions()、Object.seal()、Object.freeze() の何れかを用いる事で拡張不能に設定する事が可能です。
// 新規のオブジェクトは拡張可能 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)