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 Latest Draft (ECMA-262)
Symbol.isconcatspreadable の定義
ドラフト 変更なし。

ブラウザ実装状況

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 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,