ES6에 도입된 스프레드 문법 ...
은 하나로 뭉쳐 있는 여러 값들을 펼쳐서 개별적인 값들의 목록으로 만든다.
스프레드 문법 사용 대상은 이터러블에 한정된다.
console.log(...[1,2,3]); // 1 2 3
console.log(...'hello'); // h e l l o
const list = ...[1,2,3]; // SyntaxError
스프레드 문법의 결과는 값이 아니다. 따라서 스프레드 문법의 결과는 변숭 할당할 수 없다.
아래 문맥에서 사용 가능
const arr = [1,2,3];
const max = Math.max(...arr); // 3
스프레드 문법은 Rest 파라미터와 형태가 동일하여 혼동할 수 있으므로 주의할 필요가 있다.
Rest 파라미터는 함수에 전달된 인수들의 목록을 배열로 전달 받기 위해 이름 앞에 ...
을 붙이고, 스프레드 문법은 여러 개의 값이 하나로 뭉쳐 있는 배열과 같은 이터러블을 펼쳐서 개별적인 값들의 목록을 만드는 것이다. 서로 반대의 개념이다.
// Rest 파라미터
function foo(...rest) {
console.log(rest);
}
foo(...[1,2,3]);
const arr = [...[1,2], ...[3,4]];
console.log(arr); // [1,2,3,4]
const arr1 = [1,4];
const arr2 = [2,3];
arr1.splice(1, 0, ...arr2);
console.log(arr1); // [1,2,3,4]
아직 공식은 아니고 제안 단계. 책 참조