keys()
,values()
,entries()
를 사용할 수 있는 자료구조Map
Set
Array
keys()
,values()
,entries()
와는 문법에 차이가 있음[key, value]
쌍을 담은 배열을 반환let arr = ['Jinju', 'Baek']
let [firstName, lastName] = arr;
alert(firstName); // Jinju
alert(lastName); // Baek
인덱스를 이용하지 않고도 변수로 이름과 성을 사용할 수 있다
// 두 번째 요소는 필요하지 않음
let [a, ,c] = ['One', 'Two', 'Three', 'Four'];
alert(c); // Three
let [a, b, c] = 'abc'; // ["a","b","c"]
let [one, two, three] = new Set([1, 2, 3]);
let user = {};
[user.name, user.surname] = 'Jinju Baek'.split(' ');
alert(user.name); // Jinju
let user = {
name: 'Jinju',
age: 26
};
// 객체의 key value 순회하기
for (let [key, value] of Object.entries(user)) {
alert(`${key}:${value}`); // name:Jinju, age:26 차례로 출력
}
// 맵에도 메서드 활용가능
let user = new Map();
user.set('name', 'Jinju');
user.set('age', '26');
for(let[key, value] of user) {
alert(`${key}:${value}`); // name:Jinju, then age:26
}
let guest = 'Jane';
let admin = 'Pete';
[guest, admin] = [admin, guest];
alert(`${guest} ${admin}`); // Pete Jane
let [name1, name2, ...rest] = ['p1', 'p2', 'p3', 'p4'];
alert(name1); // p1
alert(name2); // p2
// rest는 배열이다
alert(rest[0]); // p3
alert(rest[1]); // p4
alert(rest.length); // 2
...
)와 변수가 가장 마지막에 위치해야 한다let [firstName, surname] = [];
alert(firstName); // undefined
alert(surname); // undefined
할당하고자 하는 변수의 개수가 분해하고자 하는 배열의 길이보다 크더라도 에러가 발생하지 않음
// 디폴트 값
let [name = 'Guest', surname = 'Anonymous'] = ['Jinju'];
alert(name); // Jinju
alert(surname); // Anonymous
=
을 이용하면 할당할 값이 없을 때 디폴트 값을 정해줄 수 있다
let [surname = prompt('성을 입력하세요.'), name = prompt('이름을 입력하세요.')] = ['백'];
alert(surname); // 백 (배열에서 받아온 값)
alert(name); // prompt에서 받아온 값
구조 분해 할당으로 객체도 분해할 수 있다
let {var1, var2} = {var1: ..., var2: ...}
좌측에는 상응하는 객체 프로퍼티의 패턴을 넣고 우측엔 분해하고자 하는 객체를 넣는다
let options = {
title: 'Menu',
width: 100,
height: 200
};
let {title, width, height} = options;
alert(title); // Menu
alert(width); // 100
alert(height); // 200
// 위의 코드와 아래 코드는 같다
// let {...} 안의 순서가 바뀌어도 동일하게 동작함
let {height, width, title} = { title: 'Menu', height: 200, width: 100 }
순서는 중요하지 않다
let options = {
title: 'Menu',
width: 100,
height: 200
// { 객체 프로퍼티: 목표 변수 }
let {width: w, height: h, title} = options;
// width > w
// height > h
// title > title
alert(title); // Menu
alert(w); // 100
alert(h); // 200
}
👉 콜론은 '분해하려는 객체의 프로퍼티: 목표 변수'와 같은 형태로 사용
객체나 배열이 다른 객체나 배열을 포함하는 경우에 사용
let options = {
size: {
width: 100,
height: 200
},
items: ['Sleep', 'Cigarette'],
extra: true
};
// 코드를 여러 줄에 걸쳐 작성해 의도하는 바를 명확히 드러냄
let {
size: { // 사이즈는 이곳에
width,
height
},
items: [item1, item2], // items는 이곳에 할당
title = 'Menu' // 분해하려는 객체에 title 프로퍼티가 없으므로 기본값 사용
}= options;
alert(title); // Menu
alert(width); // 100
alert(height); // 200
alert(item1); // Sleep
alert(item2); // Cigarette