この記事は編集レビューを必要としています。ぜひご協力ください。
@@unscopable
シンボルプロパティには、ES2015(ES6)以前の ECMAScript 標準には含まれていないプロパティ名があります。それらのプロパティは、with
ステートメントバインディングから除外されます。
Array.prototype[@@unscopables] のプロパテイ属性 |
|
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 可 |
構文
arr[Symbol.unscopables]
説明
with
バインディングから除外される既定の配列プロパティは次のとおりです:copyWithin と entries、fill、find、findIndex、includes、keys、values。
自作オブジェクトに unscopables
を設定する方法については、Symbol.unscopables
を見てください。
例
次のコードは、ES5 以下であれば正常に動作します。しかし、ECMAScript 2015(ES6)以降では Array.prototype.keys()
メソッドが導入されました。つまり、with
環境内では、"keys" はメソッドであり、変数ではありません。ここがビルトイン @@unscopables
の役立つ場所です。Array.prototype[@@unscopables]
シンボルプロパティが使用されると、配列のいくつかのメソッドが with
ステートメントのスコープに入ることを防ぎます。
var keys = []; with(Array.protoype) { keys.push("something"); } Object.keys(Array.prototype[Symbol.unscopables]); // ["copyWithin", "entries", "fill", "find", "findIndex", // "includes", "keys", "values"]
仕様
仕様 | 状態 | コメント |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Array.prototype[@@unscopables] の定義 |
標準 | 初期定義。 |
ECMAScript 2017 Draft (ECMA-262) Array.prototype[@@unscopables] の定義 |
ドラフト |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | 未サポート | 48 (48) | 未サポート | 未サポート | 未サポート |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | 未サポート | 未サポート | 48.0 (48) | 未サポート | 未サポート | 未サポート |