http://analogic.jp/spread-operator/
2つの別の使い方で、「...」が利用される。
Spread operator(スプレッド演算子)
ES2015から導入された、Spread operator(スプレッド演算子)。
反復可能なオブジェクト(代表的なのはArray)を、ソース上でカンマで区切って書いたように展開してくれる構文。
// これを使うと、 // func.apply(this, arguments); と書いていたところを // func(...arguments); と書ける。 // ( CoffeeScriptでは、func(arguments...); と書いていた構文 )
add = (n, m) => n + m; const argList = [1, 2]; add(...argList); // → 3
const array1 = [1,2,3]; const array2 = [4,5,6]; const array3 = [...array1, ...array2]; // → Array [ 1, 2, 3, 4, 5, 6 ]
Rest parameters (残余引数)
ES2015から導入された、Rest parameters (残余引数)。
関数の仮引数の定義で、不特定数の引数を配列として受け取るときに使う構文。
function simpleFormat(format, ...values) { let result = format; for (let i=0; i<values.length; i++) { result = result.replace("$" + i, values[i]); } return result; } simpleFormat("第0の値:$0, 第1の値:$1, 第2の値:$2", "aaa", "bbb", "ccc"); // → "第0の値:aaa, 第1の値:bbb, 第2の値:ccc"
関数の仮引数だけでなく、分割代入でも不特定数の値を配列として受け取ることができる。
[a, b, ...iterableObj] = [1, 2, 3, 4, 5]; console.log( iterableObj ); // → Array [ 3, 4, 5 ]