变量的解构赋值
1. 数组的解构赋值
- 基本用法
ES6允许写成下面这样
let [a, d, c] = [1, 2, 3]; //按照对应位置对变量赋值
这种写法也叫模式匹配 只要等号两边模式相同(解构成功),左边变量就会被赋予对应的值
let [head, ...tail] = [1, 2, 3, 4]; //...最后值是数组
head // 1
tail // [2, 3, 4]
解构失败,值会等于undefined
let [foo] = [];
let [bar, foo] = [1]; //foo解构不成功
另一种是不完全解构,等号左边的模式只匹配一部分的等号右边的数组(解构依然成功)
let [a, [b], c] = [1, [2, 3], 4]
a // 1
b // 2
...b b// [2,3]
c // 4
如果等号右边不是数组(也就是不可遍历的结构)那么将会报错
let [foo] = 1;
let [foo] = false; //不具备Iterator接口
...
对于set结构,也可以使用数组的解构赋值
let [x, y, z] = new Set(['a', 'b', 'c']);
x // 'a'
即,只要某种数据结构具有lterator接口,都可以采用数组形式的解构赋值
function *fibs() { //fibs是一个Generator函数,原生有Iterator接口
let a =0;
let b =1;
while (true) {
yield a;
[a,b] = [b, a + b];
}
}
let [first, second, third, fourth, fifth, sixth] = fibs();
sixth // 5
- 默认值
解构赋值允许指定默认值