배열을 풀어서 인자로 전달하거나, 배열을 풀어서 각각의 요소로 넣을 때 사용. 배열에서 강력한 힘
function sum(x,y,z){ return x+y+z; }
const numbers = [1,2,3];
sum(...number); // 6
파라미터를 배열의 형태로 받아서 사용. 파라미터 개수가 가변적일 때 유용
function sum(...theArgs){//배열의 형태로 매개변수 받음
return theArgs.reduce((previous, current) => {
//배열 메서드인 reduce(acc, cur) 사용
return previous + current ;
});
}
sum(1,2,3);
//6
//[1,2,3] => previous cur return
// 1 2 3
// 3 3 6
sum(1,2,3,4);
//10
//[1,2,3,4] => previous cur return
// 1 2 3
// 3 3 6
// 6 4 10
let parts = ['shoulders', 'knees'];
let lyrics = ['head', ...parts, 'and', 'toes'];
// ['head','shoulders', 'knees', 'and', 'toes']
let arr1 = [0,1,2];
let arr2 = [3,4,5];
arr1 = [...arr1, ...arr2]; // [0,1,2,3,4,5]
// 배열은 immutable 하기 때문에 arr1에 새롭게 재할당
let arr = [1,2,3];
let arr2 = [...arr]; //[1,2,3] arr.slice()와 유사하기 때문에 같은 주소조차 참조하고 있지 않음 따라서 arr!==arr2
arr2.push(4); //arr=[1,2,3] arr2 = [1,2,3,4] arr2에만 값 추가
let obj1 = { foo:'bar', x : 42 };
let obj2 = { foo:'bax', y : 13 };
let clonedObj = { ...obj1 }; //clonedObj = { foo:'bar', x : 42 } , clonedObj !== obj1
let mergedObj = { ...obj1, ...obj2 }; // mergedObj = { foo:'baz', x : 42 , y : 13 }; //foo키는 중복이기 때문에 우선순위인 obj2의 값으로 변경
function myFun(a,b,...manyMoreArgs){
console.log("a", a);
console.log("b", b);
console.log("manyMoreArgs", manyMoreArgs);
}
myFun("one", "two", "three", "four", "five", "six");
// 'a one'
// 'b two'
// 'manyMoreArgs ['three', 'four', 'five', 'six']'
🚨 헷갈리는 부분
arr = [10,30,40,20]
value = Math.max(arr); => Math.max(...arr); 배열을 펼쳐 수로 만듦
Math.max는 number형 메서드인데 매개변수로 배열을 받고 있기 때문에 NaN 출력
value = [...arr] = [10,30,40,20]
const [a, b, ...rest] = [10,20,30,40,50];
//a : 10 , b: 20 , rest = [30, 40, 50]
const {a, b, ...rest} = {a:10, b:20, c:30, d:40};
// a : 10, b: 20, rest = { c:30, d:40 };
function whois({displayName: displayName, fullName:{ firstName:name}}){
console.log(displayName + " is " + name);
}
let user = {
id: 42,
displayName: "jdoe",
fullName: {
firstName : "John",
lastName: "Doe"
}
};
whois(user);
//함수 whois의 매개변수는 오직 displayName과 fullName{fisrtName}만 필요하다. 따라서 "jdoe"와 "John"이 함수 안의 displayName 과 name 으로 각각 할당 되기 때문에 "jdoe is John" 이 출력
🚨 헷갈리는 부분
arr = ['code', 'states'] => ...arr = 'code', 'states'
...['course', 'student'] => 'course', 'student'
//함수선언문
function add(x,y){ return x + y;}
//함수표현식 -> 화살표함수
const subtract = function(x,y){ return x - y;}
const subtract = (x,y) => { return x - y; }// function 키워드 삭제 후 => 추가
const multiply10 = x => { return x*10; }
const multiply10 = x => { x*10 }
const multiply10 = x => x*10
const multiply10 = (x) => { return x*10; }
const multiply10 = function(x){
return x*10;
}
//위 다섯문장은 모두 동일하게 동작
const print = () => { return 'print'; } //단, 매개변수가 없을 때 소괄호를 생략할 수 없다.