一、数组的解构赋值
1.完全解构
只要等号两边的模式相同,左边的变量就会被赋予对应的值,如果解构不成功,变量的值就等于undefined。
数组的解构赋值是根据数组元素排列次序进行解构赋值的
let [x,y,z] = [1,[2,3],4]
console.log(y) //[2,3]
2、不完全解构
等号左边的模式只匹配一部分的等号右边的数组,这种情况下,解构依然成功,但是只会在相对应的位置解构成功。
let [x,[y],z] = [1,[2,3],4]
console.log(y) //2
3、默认值
解构赋值允许指定默认值
let [foo = true] = [];
foo // true;
ES6内部使用严格相等运算符(‘===’)判断一个位置是否有值,所以,如果一个数组成员不严格等于undefined,默认值是不会发生变化的
let [x,y = 'b'] = ['a'];
// x = 'a', y = 'b'
let [x,y = 'b'] = ['a',undefined];
// x = 'a', y = 'b'
如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。
let [x = 1] = [null];
// x = null
如果默认值是一个表达式,那么这个表达式是惰性求值的,即,只有再用到的时候才会执行求值。
function f() {
console.log("aaa");
}
let [x = f()] = [1];
//因为x可以取到值,所以函数f()根本不会执行,上面的代码其实等价于下面的代码:
let x
if([1][0] === undefined) {
x = f();
} else {
x = [1][0];
}
网友评论