MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/a3e7b5301fea

Symbol.isConcatSpreadable

Symbol.isConcatSpreadable ウェルノウンシンボルは、Array.prototype.concat() メソッドを使用してオブジェクトを配列の要素に平坦化する場合の設定として使用されます。

Symbol.isConcatSpreadable のプロパテイ属性
書込可能 不可
列挙可能 不可
設定可能 不可

説明

@@isConcatSpreadable シンボル(Symbol.isConcatSpreadable)は直接、または継承されたプロパティとして定義でき、その値は boolean です。これは、配列や配列状のオブジェクトの振る舞いを制御します:

  • 配列オブジェクトにとって、既定の動作は要素の展開(平坦化)です。Symbol.isConcatSpreadable はこれらの場合に平坦化を避けます。
  • 配列状のオブジェクトにとって、既定の動作は展開や平坦化を行いません。Symbol.isConcatSpreadable はこれらの場合に平坦化を強制します。

配列

既定で、Array.prototype.concat() は配列を次の結果のように展開(平坦化)します:

var alpha = ['a', 'b', 'c'], 
    numeric = [1, 2, 3]; 

var alphaNumeric = alpha.concat(numeric); 

console.log(alphaNumeric); // Result: ['a', 'b', 'c', 1, 2, 3]

Symbol.isConcatSpreadablefalse に設定した場合、既定の動作を使用できなくなります:

var alpha = ['a', 'b', 'c'], 
    numeric = [1, 2, 3]; 

numeric[Symbol.isConcatSpreadable] = false;
var alphaNumeric = alpha.concat(numeric); 

console.log(alphaNumeric); // Result: ['a', 'b', 'c', [1, 2, 3] ]

配列状のオブジェクト

配列状のオブジェクトは、既定で展開しません。Symbol.isConcatSpreadable 平坦化した配列を取得するには、true に設定する必要があります:

var x = [1, 2, 3];

var fakeArray = { 
  [Symbol.isConcatSpreadable]: true, 
  length: 2, 
  0: "hello", 
  1: "world" 
}

x.concat(fakeArray); // [1, 2, 3, "hello", "world"]

仕様

仕様 ステータス コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Symbol.isconcatspreadable の定義
標準 初期定義。
ECMAScript 2017 Draft (ECMA-262)
Symbol.isconcatspreadable の定義
ドラフト 変更なし。

ブラウザ実装状況

機能 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) 未サポート 未サポート 未サポート

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama
 最終更新者: YuichiNukiyama,