Array.prototype[@@unscopables]

@@unscopable シンボルプロパティには、ES2015(ES6)以前の ECMAScript 標準には含まれていないプロパティ名があります。それらのプロパティは、with ステートメントバインディングから除外されます。

構文

arr[Symbol.unscopables]

説明

with バインディングから除外される既定の配列プロパティは次のとおりです:copyWithin と entries、fill、find、findIndex、includes、keys、values。

自作オブジェクトに unscopables を設定する方法については、Symbol.unscopables を見てください。

Array.prototype[@@unscopables] のプロパティ属性
書込可能 不可
列挙可能 不可
設定可能

次のコードは、ES5 以下であれば正常に動作します。しかし、ECMAScript 2015(ES6)以降では 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"]

仕様

仕様 状態 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Array.prototype[@@unscopables] の定義
標準 初期定義。
ECMAScript Latest Draft (ECMA-262)
Array.prototype[@@unscopables] の定義
ドラフト  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
@@unscopablesChrome ? Edge 完全対応 12Firefox 完全対応 48IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Firefox Android 完全対応 48Opera Android ? Safari iOS ? Samsung Internet Android ? nodejs 完全対応 0.12

凡例

完全対応  
完全対応
実装状況不明  
実装状況不明

関連情報