解构赋值 ( Destructuring assignment )
当解构一个数组时,可以使用剩余模式,将数组剩余部分赋值给一个变量。
var [a, ...b] = [1, 2, 3];
console.log(a);
console.log(b);
var [a, ...b,] = [1, 2, 3];
解构对象 ( Destructuring assignment )
基本赋值节
var o = {p: 42, q: true};
var {p, q} = o;
console.log(p);
console.log(q);
无声明赋值节
通过解构,无需声明即可赋值一个变量。
var a, b;
({a, b} = {a: 1, b: 2});
console.log(p); // 42
console.log(q); // true
给新的变量名赋值节
可以从一个对象中提取变量并赋值给和对象属性名不同的新的变量名。
var o = {p: 42, q: true};
var {p: foo, q: bar} = o;
console.log(foo);
console.log(bar);
默认值节
变量可以先赋予默认值。当要提取的对象没有对应的属性,变量就被赋予默认值。
var {a = 10, b = 5} = {a: 3};
console.log(a);
console.log(b);
给新的变量命名并提供默认值节
一个属性可以是1)从一个对象解构,并分配给一个不同名称的变量2)分配一个默认值,以防未解构的值是undefined
。
var {a:aa = 10, b:bb = 5} = {a: 3};
console.log(aa);
console.log(bb);
解构嵌套对象和数组
const metadata = {
title: 'Scratchpad',
translations: [
{
locale: 'de',
localization_tags: [],
last_edit: '2014-04-14T08:43:37',
url: '/de/docs/Tools/Scratchpad',
title: 'JavaScript-Umgebung'
}
],
url: '/en-US/docs/Tools/Scratchpad'
};
let {
title: englishTitle,
translations: [
{
title: localeTitle,
},
],
} = metadata; //这个必须!!!
console.log(englishTitle);
console.log(localeTitle);
For of 迭代和解构节
var people = [
{
name: 'Mike Smith',
family: {
mother: 'Jane Smith',
father: 'Harry Smith',
sister: 'Samantha Smith'
},
age: 35
},
{
name: 'Tom Jones',
family: {
mother: 'Norah Jones',
father: 'Richard Jones',
brother: 'Howard Jones'
},
age: 25
}
];
for (var {name: n, family: {father: f}} of people) { //必须是of
console.log('Name: ' + n + ', Father: ' + f);
}