解构赋值

2018-11-27  本文已影响0人  暖年的咆哮

一、数组的解构赋值

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];
    }
上一篇下一篇

猜你喜欢

热点阅读