この記事は編集レビューを必要としています。ぜひご協力ください。
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.isConcatSpreadable
を false
に設定した場合、既定の動作を使用できなくなります:
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) | 未サポート | 未サポート | 未サポート |