Array.prototype[@@unscopables]
@@unscopable
シンボルプロパティには、 ES2015 以前の ECMAScript 標準には含まれていないプロパティ名があります。それらのプロパティは、with
文のバインディングから除外されます。
解説
with
バインディングから除外される既定の配列プロパティは次のとおりです。
自作オブジェクトに unscopables
を設定する方法については、 Symbol.unscopables
を見てください。
Array.prototype[@@unscopables] のプロパティ属性 |
|
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 可 |
例
with 環境内での使用
次のコードは、 ES5 以下であれば正常に動作します。しかし、 ECMAScript 2015 以降では Array.prototype.keys()
メソッドが導入されました。つまり、with
環境内では、 "keys" はメソッドであり、変数ではありません。ここが組込み @@unscopables
の役立つ場所です。Array.prototype[@@unscopables]
シンボルプロパティが使用されると、配列のいくつかのメソッドが with
文のスコープに入ることを防ぎます。
var keys = [];
with (Array.prototype) {
keys.push('something');
}
Object.keys(Array.prototype[Symbol.unscopables]);
// ["copyWithin", "entries", "fill", "find", "findIndex",
// "includes", "keys", "values"]
仕様書
ブラウザーの互換性
BCD tables only load in the browser