스프레드 문법

김민수·2023년 11월 23일
0
post-thumbnail

스프레드 문법(전개 문법) : 하나로 뭉쳐 있는 여러 값들의 집합을 펼쳐서 개별적인 값들의 목록으로 만든다.

  • 사용할 수 있는 대상 : for ... 문으로 순회할 수 있는 이터러블에 한정된다.
  • 스프레드 문법의 결과는 값이 아니다. 이는 스프레드 문법이 피연산자를 연산하여 값을 생성하는 연산자가 아님을 의미한다. 따라서 스프레드 문법의 결과는 변수에 할당할 수 없다.

함수 호출문의 인수 목록에서 사용하는 경우

const arr = [1,2,3];
const max = Math.max(...arr); // 3

rest 파라미터와 형태가 동일하여 혼동할 수 있으므로 주의!

// rest
function foo(...rest){
	console.log(rest); //1,2,3
}

// 스프레드 문법
foo(...[1,2,3]);

2. 배열 리터럴 내부에서 사용하는 경우

concat

// ES5
console.log([1,2].concat([3,4])); // [1,2,3,4] 

// ES6
console.log([...[1,2], ...[3,4]]); // [1,2,3,4]

splice

// ES5
var arr1 = [1,4];
var arr2 = [2,3];
Array.prototype.splice.apply(arr1, [1,0].concat(arr2));
console.log(arr1); // [1,2,3,4]

// ES6
const arr1 = [1,4];
const arr2 = [2,3];
arr1.splice(1,0, ...arr2);
console.log(arr1); // [1,2,3,4] 1, 4 사이에 추가!

배열 복사

// ES5
var origin = [1,2];
var copy = origin.slice();

// ES6
const origin = [1,2];
const copy = [...origin];

// 얕은 복사 하여 새로운 복사본 생성!

이터러블을 배열로 변환

function sum(){
  return [...arguments].reduce((a,b) => a + b, 0);
}
console.log(sum(1,2,3)); // 6

3. 객체 리터럴 내부에서 사용하는 경우

스프레드 문법의 대상은 이터러블이어야 하지만 스프레드 프로퍼티 제안은 일반 객체를 대상으로도 스프레드 문법의 사용을 허용한다.

스프레드 프로퍼티가 제안되기 이전에는 ES6에서 도입된 Object.assign 메서드를 사용하여 여러 개의 객체를 병합하거나 특정 프로퍼티를 변경 또는 추가했다.

0개의 댓글