구조 분해 할당 구문은 배열이나 객체의 속성을 분해해서 그 값을 변수에 담을 수 있게 하는 표현식




공백과 쉼표를 이용해서 필요하지 않은 배열을 무시할 수 있음.

Tom은 공백으로 무시, 4번째 변수 Tony도 사용하는 변수가 없으므로 무시됨

a에 b값을 넣고 b에 a값을 넣고 싶으면?

a=b라고 하는 순간 기존에 있는 a값은 없어져 버리니까 안됨

이럴땐 c=a로 기존의 a값을 잠시 저장.

그다음 b를 a로 옮김

그다음 임시로 저장했던 c의 값을 b로 옮김
그런데 위와 같은 과정은 복잡.
이럴때 구조분해 할당은 굉장히 편리함.

위와 같이 간단하게 구현할 수 있음. 임시변수 c가 필요 없음.


순서를 바뀌어도 동일하게 동작
let user ={name : 'mike', age:30};
let {age, kiki}=user;
console.log(kiki, age);//undefined 30
console.log(user.kiki);//undefined




위와 같이 인수를 더 많이 받던 적게받던 에러는 발생하지 않음.
더 많이 받으면 그냥 있는 만큼만 찍히고(mike만)
못받으면 undefined가 찍힘
인수 갯수를 맞출 필요는 없음
function sum(a,b){
return a+b;
}
console.log(sum(1));//NaN
console.log(sum());//NaN
console.log(sum(1,2,3));//3

arguments가 length 와 index가 있기때문에 배열이라고 생각할 수 있지만 사실 array형태의 객체임
그렇기에 forEach나 map같은거 사용불가 배열 아니고 객체니까.
function show(name){
console.log(arguments)
}
show('mike','tom');//[Arguments] { '0': 'mike', '1': 'tom' }
let user ={name : 'mike', age:30};
console.log(user.length)//undefined
일반객체에는 length적용 불가
ES6환경이면 가급적 나머지 매개변수사용권장

나머지 매개변수는 정해지지않은 갯수의 인수를 배열로 나타낼수 있게함
위와 같이 점 3개를 찍고 뒤에 배열 이름을 정해줌.
그러면 저 names배열안에 전달된 인수들이 들어감.
아무것도 전달하지 않으면 undefined 가 아니라 빈배열이 나타남
어떤 함수가 있는데 전달된 모든 수를 더해야함(사전에 정해진 갯수 없음)

arguments와 다르게 배열의 배소드들을 사용할 수 있음.

위와 같이 배열의 메소드 forEach, reduce사용해 합을 구함.

function User(name, age, ...skills){
this.name = name;
this.age = age;
this.skills = skills;
}
const user1 = new User('mike', 30, 'html','css');
const user2 = new User('tom',20,'js','react','css');
const user3 = new User('jane', 10,'english','css','dance');
console.log(user1);
//User { name: 'mike', age: 30, skills: [ 'html', 'css' ] }
console.log(user2);
//User { name: 'tom', age: 20, skills: [ 'js', 'react', 'css' ] }
console.log(user3);
//User { name: 'jane', age: 10, skills: [ 'english', 'css', 'dance' ] }
주의 !! 나머지 매개변수는 항상 맨 마지막에 있어야 함.
알맹이만 쏙 가져오는 느낌? 인듯



원래 위와 같은 메소드 이용해서 배열에 넣고 중간에 빼고 병합하고 하는과정은 굉장히 번거로움.
그런데 전개구문 사용하면 쉬움


Object.assign을 쓸 필요가 없음.
user2의 name을 바꾸어도 user의 name에는 아무 영향을 미치지 않음.




