javascriptの「...」 (ES2015)

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 ]