[JS] 스프레드 문법 ...

hahaha·2021년 9월 7일
0

JavaScript

목록 보기
15/24
post-thumbnail

스프레드 문법(전개 문법) ...

  • 여러 값들의 집합을 펼쳐서 개별적인 값들의 목록으로 만들기
  • 사용 대상: 이터러블로 한정
  • 값을 생성하는 연산자 X -> 결과값을 변수에 할당 X
  • ES6 에서 등장

사용하는 경우

1. 함수 호출문의 인수 목록

const arr = [1, 2, 3];
const max = Math.max(...arr);
  • Rest 파라미터와 형태 동일하므로 주의
    - 함수에 전달된 인수들의 목록을 배열로 전달받음 (스프레드와 반대 개념)
// Rest 파라미터
function foo(...rest) {
  console.log(rest);	// [1, 2, 3]
}

// 스프레드 문법
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);	// [1, 2, 3, 4]

// 스프레드 문법 이전
var arr = [1, 2].concat([3, 4]);
console.log(arr);	// [1, 2, 3, 4]

2) 배열 요소 변경

const arr1 = [1, 4];
const arr2 = [2, 3];

arr1.splice(1, 0, ...arr2);
console.log(arr1);	// [1, 2, 3, 4]

// 스프레드 문법 이전
var arr1 = [1, 4];
var arr2 = [2, 3];

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

3) 배열 복사

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

console.log(copy);		// [1, 2]
console.log(origin === copy);	// true

// 스프레드 문법 이전
var origin = [1, 2];
var copy = origin.slice();

console.log(copy);		// [1, 2]
console.log(origin === copy);	// true

4) 이터러블 -> 배열 변환

function sum() {
  return [...arguments].reduce((pre, cur) => pre + cur, 0);
}

console.log(sum(1, 2, 3));	// 6

// 스프레드 문법 이전
function sum() {
  var args = Array.prototype.slice.call(arguments);
  
  return args.reduce((pre, cur) => pre + cur, 0);
}

console.log(sum(1, 2, 3));	// 6

3. 객체 리터럴 내부

// 프로퍼티가 중복되는 경우, 뒤에 위치한 프로퍼티가 우선권 가짐
const merged = { ... { x: 1, y:2 }, ... {y: 10, z: 3}};
console.log(merged);	// { x: 1, y: 10, z: 3}

// 스프레드 문법 이전
const merged = Object.assign({}, { x: 1, y:2 },{y: 10, z: 3});
console.log(merged);	// { x: 1, y: 10, z: 3}
profile
junior backend-developer 👶💻

0개의 댓글