배열의 각 요소를 배열로부터 추출하여 1개 이상의 변수에 할당한다.
이때 배열 디스트럭처링 할당의 대상(할당문의 우변)은 이터러블이어야하며, 할당 기준은 배열의 인덱스다. 즉 순서대로 할당된다.
const arr = [1, 2, 3];
const [one, two, three] = arr;
console.log(one, two, three); // 1 2 3
const [x, y] = [1, 2];
const [x, y]; // SyntaxError
const [a, b] = {}; // TypeError
const [a, b] = [1, 2];
console.log(a, b) // 1 2
const [c, d] = [1];
console.log(c, d); // 1 undefined
const [e, f] = [1, 2, 3];
console.log(e, f); // 1 2
const [g, , h] = [1, 2, 3];
console.log(g, h); // 1 3
// 기본값
const [a, b, c = 3] = [1, 2];
console.log(a, b, c); // 1 2 3
// 기본값보다 할당된 값이 우선한다.
const [e, f = 10, g = 3] = [1, 2];
console.log(e, f, g); // 1 2 3
// Rest 요소
const [x, ...y] = [1, 2, 3];
console.log(x, y); // 1 [2, 3]
객체의 각 프로퍼티를 객체로부터 추출하여 1개 이상의 변수에 할당한다.
이때 객체 디스트럭처림 할당의 대상(할당문의 우변)은 객체이어야하며, 할당 기준은 프로퍼티 키다.
즉, 순서는 의미 없으며 선언된 변수 이름과 프로퍼티 키가 일치하면 할당된다.
const user = {
firstName: 'Ungmo',
lastName: 'Lee',
};
// 변수 lastName, firstName을 선언하고 user 객체를 디스트럭처링하여 할당한다.
// 이때 프로퍼티 키를 기준으로 디스트럭처링 할당이 이루어진다. 순서는 의미가 없다.
const { lastName, firstName } = user;
console.log(firstName, lastName); // Ungmo Lee
const { lastName, firstName } = { firstName: 'Ungmo', lastName: 'Lee' };
const {lastName, firstName}; // SyntaxError
const {lastName, firstName} = null; // TypeError
const { lastName, firstName } = user;
// 위와 아래는 동치다.
const { lastName: lastName, firstName: firstName } = user;
const user = {
firstName: 'Ungmo',
lastName: 'Lee',
};
// 프로퍼티 키를 기준으로 디스트럭처링 할당이 이루어진다.
const { lastName: ln, firstName: fn } = user;
console.log(fn, ln); // Ungmo Lee
const { firstName = 'Ungmo', lastName } = { lastName: 'Lee' };
console.log(firstName, lastName); // Ungmo Lee
const { lastName: ln, firstName: fn = 'Ungmo' } = { lastName: 'Lee' };
console.log(fn, ln); // Ungmo Lee
const str = 'Hello';
// String 래퍼 객체로부터 length 프로퍼티만 추출한다.
const { length } = str;
console.log(length); // 5
const todo = { id: 1, content: 'HTML', completed: true };
// todo 객체로부터 id 프로퍼티만 추출한다.
const { id } = todo;
console.log(id); // 1
function printTodo({content, completed}) {
console.log(`할일 ${content}은 ${completed ? '완료' : '비완료'} 상태입니다.`);
}
printTodo({ id: 1, content: 'HTML', completed: true }); // 할일 HTML은 완료 상태입니다.
const todos = [
{ id: 1, content: 'HTML', completed: true },
{ id: 2, content: 'CSS', completed: false },
{ id: 3, content: 'JS', completed: false },
];
// todos 배열의 두 번째 요소인 객체로부터 id 프로퍼티만 추출한다.
const [, { id }] = todos;
console.log(id); // 2
const user = {
name: 'Lee',
address: {
zipCode: '03068',
city: 'Seoul',
},
};
// address 프로퍼티 키로 객체를 추출하고 이 객체의 city 프로퍼티 키로 값을 추출한다.
const { address: { city } } = user;
console.log(city); // 'Seoul'
객체 디스트럭처링 할당을 위한 Rest 파라미터나 Rest 요소와 유사하게 Rest 프로퍼티 ...
을 사용할 수 있다.
반드시 마지막에 위치해야 한다.
// Rest 프로퍼티
const { x, ...rest } = { x: 1, y: 2, z: 3 };
console.log(x, rest); // 1 {y: 2, z: 3}