定義(Definition)
複数の引数 (関数呼び出しのため) または複数の要素 (配列リテラルのため)、あるいは複数の値 (分割代入のため) が置かれるところで式が展開されます。
簡単に言うと、 配列とかを文脈に合わせて 展開してくれるようなイメージです。
構文(Syntax)
1. 関数の呼び出しに対して:
myFunction(...iterableObj);
使用例1:
function myFunction(x, y, z) { }
var args = [0, 1, 2];
myFunction(...args);
使用例2:
function myFunction(v, w, x, y, z) { }
var args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);
2. 配列リテラルに対して:
[...iterableObj, 4, 5, 6]
使用例:
var parts = ['shoulder', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes']; // ["head", "shoulders", "knees", "and", "toes"]
3.分割代入に対して:
[a, b, ...iterableObj] = [1, 2, 3, 4, 5];
ブラウザの実装状況(2017.11.29時点)
デスクトップ
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
配列リテラルでのスプレッド演算 | 46 | 16 (16) | Edge | 未サポート | 7.1 |
関数呼び出しでのスプレッド演算 | 46 | 27 (27) | Edge | 未サポート | 7.1 |
分割代入でのスプレッド演算 | 49 | 34 (34) | 未サポート | ? | ? |
モバイル
機能 | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
配列リテラルでのスプレッド演算 | 未サポート | 46 | 16.0 (16) | 未サポート | 未サポート | 8 | 46 |
関数呼び出しでのスプレッド演算 | 未サポート | 46 | 27.0 (27) | 未サポート | 未サポート | 8 | 46 |
分割代入でのスプレッド演算 | 未サポート | 未サポート | 34 (34) | ? | ? | ? | 未サポート |
対応状況を見ると、 3.分割代入 構文はまだ使わない方が良いでしょう。