스프레드 문법(전개 문법) ...
- 여러 값들의 집합을 펼쳐서 개별적인 값들의 목록으로 만들기
- 사용 대상: 이터러블로 한정
- 값을 생성하는 연산자 X -> 결과값을 변수에 할당 X
- ES6 에서 등장
사용하는 경우
1. 함수 호출문의 인수 목록
const arr = [1, 2, 3];
const max = Math.max(...arr);
- Rest 파라미터와 형태 동일하므로 주의
- 함수에 전달된 인수들의 목록을 배열로 전달받음 (스프레드와 반대 개념)
function foo(...rest) {
console.log(rest);
}
foo(...[1, 2, 3]);
스프레드 문법 이전
Function.prototype.apply
사용
- apply 함수의 2번째 인수(배열)는 apply 함수가 호출하는 함수의 인수 목록
- ex. apply 함수의 2번째 인수(arr)는 apply 함수가 호출하는 함수(Math.max)의 인수 목록
var arr = [1, 2, 3];
var max = Math.max.apply(null, arr);
2. 배열 리터럴 내부
1) 배열 결합
const arr = [...[1, 2], ...[3, 4]];
console.log(arr);
var arr = [1, 2].concat([3, 4]);
console.log(arr);
2) 배열 요소 변경
const arr1 = [1, 4];
const arr2 = [2, 3];
arr1.splice(1, 0, ...arr2);
console.log(arr1);
var arr1 = [1, 4];
var arr2 = [2, 3];
Array.prototype.splice.apply(arr1, [1, 0].concat(arr2));
console.log(arr1);
3) 배열 복사
const origin = [1, 2];
const copy = [...origin];
console.log(copy);
console.log(origin === copy);
var origin = [1, 2];
var copy = origin.slice();
console.log(copy);
console.log(origin === copy);
4) 이터러블 -> 배열 변환
function sum() {
return [...arguments].reduce((pre, cur) => pre + cur, 0);
}
console.log(sum(1, 2, 3));
function sum() {
var args = Array.prototype.slice.call(arguments);
return args.reduce((pre, cur) => pre + cur, 0);
}
console.log(sum(1, 2, 3));
3. 객체 리터럴 내부
const merged = { ... { x: 1, y:2 }, ... {y: 10, z: 3}};
console.log(merged);
const merged = Object.assign({}, { x: 1, y:2 },{y: 10, z: 3});
console.log(merged);