Node.js/JavaScript
[JS문법] ...(three dots, 점 세개)의 사용법 두 가지(객체/배열 vs 함수)
왈왈디
2023. 5. 10. 11:00
728x90
자바스크립트에서 점 세개, `...` 은 두 가지 사용법이 있다.
1. Spread Operator
뒤늦게 알게 되어 매우 아쉬울 정도로 객체와 배열을 사용할 때 아주 유용한 방식이다.
객체와 배열을 사용할 때 서로 다른 객체/배열끼리 합치고 싶을 때가 많다.
그때 {}, [] 의 껍데기가 거슬리게 느껴지는데 이를 없애주는 것이 ...이다.
사용법은 아래와 같다.
[객체 ver.]
const walwal = {
name: "Walwal",
age: 19,
height: 180,
job: "backend developer"
}
const john = {
...walwal,
name: "John",
age: 20,
hobby: "skating"
}
// john = {
// name: "John",
// age: 20
// height: 180,
// job: "backend developer",
// hobby: "skating"
// }
...을 사용하면 기존의 객체를 구조분해하여 새로운 객체에 집어넣을 수 있다.
다만 같은 key값에 대해 새로운 값을 부여할 경우 새롭게 정의된 값이 key에 할당된다.
따라서 위의 name, age과 같이 key가 겹치는 경우 john의 새로운 값들로 바뀐 것이다.
[배열 ver.]
const fruits = [ "banana", "apple", "mango"]
const foods = [...fruits, "pasta", "ramen", "hamburger"]
//foods = ["banana", "apple", "mango", "pasta", "ramen", "hamburger"]
배열은 어느 위치에 합치든 상관없다.
key값이 겹치는 일이 없기 때문에 중복된 값도 그대로 들어간다.
const fruits = [ "banana", "apple", "mango"]
const foods = ["pasta", "ramen", ...fruits, "hamburger"]
// foods = [ 'pasta', 'ramen', 'banana', 'apple', 'mango', 'hamburger' ]
const fruits = [ "banana", "apple", "mango"]
const foods = ["pasta", "ramen", ...fruits, "banana", "apple", "mango", "hamburger"]
// foods = [ 'pasta', 'ramen', 'banana', 'apple', 'mango', 'banana', 'apple', 'mango', 'hamburger' ]
2. Rest Operator
이 방식은 함수를 정의할 때 사용된다.
함수 인자에 대해, 개수를 미리 정하지 않고, 일정 개수 이상으로 들어오는 인자에 대해서는 모두 하나의 배열 안에 묶는 방식이다.
아래 예시를 보자.
const functionWithDots = (firstArg, ...otherArgs) => {
console.log(firstArg);
console.log(otherArgs);
};
functionsWithDots(1,2,3,4,5,6);
// 1
// [2,3,4,5,6]
(Arg는 argument (인자)의 줄임말)
첫 번째 인자 이후로 들어오는 인자들은 모두 하나의 배열로 묶어서 처리한다.
...을 사용한 인자는 마지막 순서에만 사용이 가능하며, 앞이나 중간에 넣을 경우 Error가 발생한다.
728x90