JS ES6 에서 아직 부족한 개념을 정리, 공부
function foo(x, y, z) {
console.log(x); // 1
console.log(y); // 2
console.log(z); // 3
}
const arr = [1, 2, 3];
foo(...arr);
let arr = [1, 2, 3];
console.log([...arr, 4, 5, 6]);//[1, 2, 3, 4, 5, 6];
let a = {x: 1, y: 2}
let b = {...a, z: 3};
console.log(b); // { x: 1, y: 2, z: 3 }
function foo(...rest) {
console.log(rest);
}
foo(1, 2, 3, 4, 5); // [1, 2, 3, 4, 5]
//
function foo2(a, b, ...rest) {
console.log(rest);
}
foo(1, 2, 3, 4, 5);// [3, 4, 5]
...rest
를 파라미터 마지막에 사용할 수 있다. 다만, 마지막에만 사용가능! //ES5
let arr = [1, 2, 3];
let a = arr[0];
let b = arr[1];
let c = arr[2];
console.log(a, b, c); // 1 2 3
//ES6
let arr = [1, 2, 3];
let [a, b, c] = arr;
console.log(a, b, c); // 1 2 3
//if..
let [a, b, c]; // SyntaxError: Missing initializer in destructuring declaration
// 왼쪽 변수 리스트와 오른쪽 배열은 배열의 인덱스를 기준으로 할당된다.
let a, b, c;
[a, b] = [1, 2];
console.log(a, b);// 1 2
[a, b] = [1];
console.log(a, b);// 1, undefined
[a, b] = [1, 2, 3];
console.log(a, b);// 1, 2
[a, , b] = [1, 2, 3];
console.log(a, b);// 1 3
[a, b, c = 3] = [1, 2];
console.log(a, b, c);// 1 2 3
[a, b = 5, z = 3] = [1, 2];//b에 5가 할당되어 있지만 2로 덮어씌워짐.
console.log(a, b, c);// 1 2 3
[x, ...y] = [1, 2, 3]; // x = 1, ...y에는 2, 3이 들어가고 배열로 나온다. Rest문법
console.log(x, y); // 1, [2, 3]
//ES5
let obj = { username: '김코딩', text: '안녕하세요' };
let name = obj.username;
let text = obj.text;
console.log(name, text); //김코딩 안녕하세요
//ES6
let obj = { username: '김코딩', text: '안녕하세요' };
let { username, text } = obj;
console.log(username); //김코딩
console.log(text); // 안녕하세요
let { text, username } = obj;
console.log(username); //김코딩
console.log(text); // 안녕하세요
let { a, b } = obj;
console.log(a); //undefined;
console.log(b); //undefined;
// 프로퍼티 키가 prop1인 프로퍼티의 값을 변수 p1에 할당
// 프로퍼티 키가 prop2인 프로퍼티의 값을 변수 p2에 할당
let { prop1: p1, prop2: p2 } = { prop1: 'a', prop2: 'b' };
console.log(p1, p2); // a b
//위에 있는 코드와 같은 코드
const { prop1, prop2 } = { prop1: 'a', prop2: 'b' };
console.log({ prop1, prop2 }); // { prop1: a, prop2: b}
const todos = [
{ id: 1, content: 'HTML', completed: true },
{ id: 2, content: 'CSS', completed: false },
{ id: 3, content: 'JS', completed: false }
];
// todos 배열의 요소인 객체로부터 completed 프로퍼티만을 추출한다.
const completedTodos = todos.filter(({ completed }) => completed);
console.log(completedTodos); // [ { id: 1, content: 'HTML', completed: true }
//중첩객체
const person = {
name: 'Lee',
address: {
zipCode: '03068',
city: 'Seoul'
}
};
const { address: { city } } = person;
console.log(city); // 'Seoul'