나머지연산자, 스프레드문법

lee jae hwan·2022년 7월 24일

javascript

목록 보기
32/107

나머지연산자와 스프레드문법의 차이를 이해하자

나머지연산자는 전달되는 여러인자들을 하나의 배열로 변환하는 연산자로서 배열객체를 반환한다.
(개별인자들을 하나의 배열로 받는다.)

스프레트문법은 하나의 배열을 여러개의 인자들로 확장하는 문법구조체로 반환값이 없으며 문법적으로 처리한다.
(이터러블객체를 확장하여 전달한다.)



나머지연산자는 할당관계에서 받는 쪽에 위치하며 반환값은 배열이다.
(모든 연산자는 값을 반환한다)

function f(arg1, arg2, ...rest) { 
}

나머지매개변수는 항상 마지막에 위치해야 한다.




스프레드문법은 엔진이 실행전에 스크립트를 해석할때 문법에따라 스크립트를 대체한후 실행하는것과 같다.

let arr = [3, 5, 1];
Math.max(...arr); // 함수호출 확장해서 전달한다.
Math.max(arr[0],arr[1],arr[2]);

위코드에서 ...arr는 엔진이 코드를 해석하여 arr[0], arr[1], arr[2]로 코드를 대체한후 실행하는것과 같다.

스프레드문법은 이터러블객체만 사용가능하며 유사배열객체는 사용할 수 없다.



let str = ...'abc'; // 에러발생
let str = 'abcd'[0],'abcd'[1],'abcd'[2]; //코드대체

스프레드문법은 연산자가 아니기때문에 위코드는 에러가 발생한다.

let arr = [...'abc'];
let arr = ['abc'[0],'abc'[1],'abc'[2]]; //코드대체

위와같이 [ ]배열기호내에서 확장되면 배열스크립트와 같으므로 정상적으로 실행된다.

스프레드문법을 이용한 배열과 객체복사

let arr = [1,2,3];
let arrCopy = [...arr]; // 배열복사효과발생

스프레드문법은 연산자가 아니기때문에 자체적으로 배열을 만드는 것이 아니고 [] 배열기호와 같이 사용해야함을 유의하자

이전에 스프레드문법은 이터러블객체에한해 사용가능하다고했다.

let obj = {
   name:'lee',
   age:23
};
let objCopy = {...obj};

그런데 위와같이 일반객체복사가 가능하다.
console.log(...obj); 이터레이터가 없어 에러가 발생한다.
아마도 엔진이 객체복사를위해 스프레드문법의 예외를 만든것 같다.

0개의 댓글