나머지 매개변수와 스프레드 문법

김서현·2023년 5월 13일

JavaScript 스터디

목록 보기
7/8

나머지 매개변수와 스프레드 문법

나머지 매개변수 ...

남아있는 매개변수들을 한데 모아 배열에 집어넣어 준다

function showName(firstName, lastName, ...titles) {
  alert( firstName + ' ' + lastName ); // Bora Lee

  // 나머지 인수들은 배열 titles의 요소가 됩니다.
  // titles = ["Software Engineer", "Researcher"]
  alert( titles[0] ); // Software Engineer
  alert( titles[1] ); // Researcher
  alert( titles.length ); // 2
}

showName("Bora", "Lee", "Software Engineer", "Researcher");

❗ 나머지 매개변수는 항상 마지막에 있어야 한다.

arguments 객체

유사배열 객체 => 인덱스를 사용해 인수 접근 가능
배열은 아니므로 배열 메서드 사용 불가능 (ex. argument.map(...) ❌)

function showName() {
  alert( arguments.length );
  alert( arguments[0] );
  alert( arguments[1] );

  // arguments는 이터러블 객체이기 때문에
  // for(let arg of arguments) alert(arg); 를 사용해 인수를 펼칠 수 있습니다.
}

// 2, Bora, Lee가 출력됨
showName("Bora", "Lee");

// 1, Bora, undefined가 출력됨(두 번째 인수는 없음)
showName("Bora");

스프레드 문법

나머지 매개변수와 반대로 동작하는 문법으로 해당 요소들을 펼쳐준다.

let arr = [3, 5, 1];
let arr2 = [8, 9, 15];

let merged = [0, ...arr, 2, ...arr2];

alert(merged); // 0,3,5,1,2,8,9,15 (0, arr, 2, arr2 순서로 합쳐집니다.)

문자열도 문자 배열로 변환 가능하다

let str = "Hello";

alert( [...str] ); // H,e,l,l,o

배열과 객체의 복사본 만들기

배열 복사하기

let arr = [1, 2, 3];
let arrCopy = [...arr]; // 배열을 펼쳐서 각 요소를 분리후, 매개변수 목록으로 만든 다음에
                        // 매개변수 목록을 새로운 배열에 할당함

// 배열 복사본의 요소가 기존 배열 요소와 진짜 같을까요?
alert(JSON.stringify(arr) === JSON.stringify(arrCopy)); // true

// 두 배열은 같을까요?
alert(arr === arrCopy); // false (참조가 다름)

// 참조가 다르므로 기존 배열을 수정해도 복사본은 영향을 받지 않습니다.
arr.push(4);
alert(arr); // 1, 2, 3, 4
alert(arrCopy); // 1, 2, 3

객체 복사하기

let obj = { a: 1, b: 2, c: 3 };
let objCopy = { ...obj }; // 객체를 펼쳐서 각 요소를 분리후, 매개변수 목록으로 만든 다음에
                          // 매개변수 목록을 새로운 객체에 할당함

// 객체 복사본의 프로퍼티들이 기존 객체의 프로퍼티들과 진짜 같을까요?
alert(JSON.stringify(obj) === JSON.stringify(objCopy)); // true

// 두 객체는 같을까요?
alert(obj === objCopy); // false (참조가 다름)

// 참조가 다르므로 기존 객체를 수정해도 복사본은 영향을 받지 않습니다.
obj.d = 4;
alert(JSON.stringify(obj)); // {"a":1,"b":2,"c":3,"d":4}
alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}

1개의 댓글

comment-user-thumbnail
2023년 5월 21일

저도 이번에는 코드를 만들때 스프레드 연산자를 많이 활용해보려고 하는데! 배열 초기화, 합치기, 복사하기를 할때 간단하게 할 수 있어 정말 좋은 것 같아요! arguments 객체는 생소해서 조금 찾아봤는데 화살표 함수에서는 바로 못사용하고 스프레드 문법을 활용해서 사용해야한다고 하네요! 깔끔한 정리 굿이에옹 굿!!!

답글 달기