变量的解构:
1. 数组解构:
按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring):
let [a, b, c] = [1, 2, 3];
只要等号两边的模式相同,左边的变量就会被赋予对应的值:
let [foo, [[bar], baz]] = [1, [[2], 3]];
let [a, [b], d] = [1, [2, 3], 4]; a // 1 b // 2 d // 4
如果等号的右边不是数组(或者严格地说,不是可遍历的结构,参见《Iterator》一章),那么将会报错:
// 报错 let [foo] = 1; let [foo] = false; let [foo] = NaN; let [foo] = undefined; let [foo] = null; let [foo] = {};
Set 结构 解构??????????????????????????????????????????????????????????????????????????????????
Generator 函数 解构 ??????????????????????????????????????????????????
解构赋值允许指定默认值:
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b' 只有当一个数组成员严格等于undefined
,默认值才会生效。
let [x = 1] = [null]; // x = null
默认值可以引用解构赋值的其他变量,但该变量必须已经声明:
let [x = 1, y = x] = []; // x=1; y=1
let [x = 1, y = x] = [2]; // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = []; // ReferenceError: y is not defined
2. 对象解构:
3. 函数解构:
???????????????????????? 没看懂为啥? .map 是函数? 这个的属性值?
[[1, 2], [3, 4]].map(([a, b]) => a + b);
// [ 3, 7 ]