구조 분해 할당과 rest 문법은 이런저런 요약보다 예시를 보면서 익숙해지는게 더 좋은거 같다!
예시 참고 사이트(https://learnjs.vlpt.us/useful/06-destructuring.html)
const deepObject = {
state: {
information: {
name: 'velopert',
languages: ['korean', 'english', 'chinese']
}
},
value: 5
};
const { name, languages } = deepObject.state.information;
const { value } = deepObject;
const extracted = {
name,
languages,
value
};
// 이것과 같은 것임.
const extracted = {
name: name,
languages: languages,
value: value
}
console.log(extracted); // {name: "velopert", languages: Array[3], value: 5}
이런식으로 꺼내 쓴다.
var [a, ...rest] = [1, 2, 3];
console.log(a); // 1
console.log(rest); // [2, 3]
function foo( ...rest, param1, param2) { }
foo(1, 2, 3, 4, 5);
// SyntaxError: Rest parameter must be last formal parameter
// ES6
function sum(...args) {
console.log(arguments); // Arguments(5) [1, 2, 3, 4, 5, callee: (...), Symbol(Symbol.iterator): ƒ]
console.log(Array.isArray(args)); // true
return args.reduce((pre, cur) => pre + cur);
}
console.log(sum(1, 2, 3, 4, 5)); // 15
하지만 ES6의 화살표 함수에는 함수 객체의 arguments 프로퍼티가 없다. 따라서 화살표 함수로 가변 인자 함수를 구현해야 할 때는 반드시 rest 파라미터를 사용해야 한다.
function test() {
if (arguments.length === 0) {
return 0;
} else if (arguments.length === 1) {
return 1;
} else if (arguments.length === 2) {
return 2;
} else {
return -1;
}
}
작심삼일이라는 말 듣기 싫어서 적었지만 가변인자라는 새로운 개념을 배웠다. 뿌듯하다.
굿 ~ 바이~