【ES6 】ES6 解构赋值--数组解构赋值

定义

  ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

数组的解构赋值

  • 以前,为变量赋值,只能直接指定值。
    let a = 1;
    let b = 2;
    let c = 3;
  • es6写法

    let [a, b, c] = [1, 2, 3];
  • 不完全解构--解构不成功,值都会等于undefined

    let [x, y, ...z] = ['a'];
    x // "a"
    y // undefined
    z // []
    
    
    
    let [bar, foo] = [1];
    
    foo   //undefined
    
    
    
    let [foo] = [];
    
    foo   //undefined
  • 不完全解构的另外一种情况

    //等号左边的模式,只匹配一部分的等号右边的数组 ,此时解构成功
    let [x, y] = [1, 2, 3];
    x // 1
    y // 2
    
    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 结构,也可以使用数组的解构赋值。

    let [x, y, z] = new Set(['a', 'b', 'c']);
    x // "a" 

数组解构赋值允许默认值

  • ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。
    //默认值生效了
    let [foo = true] = [];
    foo // true
    
    let [x, y = 'b'] = ['a']; // x='a', y='b'
    let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
    
    let [x = 1] = [undefined]; //x=1
    
    //默认值没有生效
    let [x = 1] = [null];
    x // null
  • 默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值

    function f() {
      console.log('aaa');
    }
    
    let [x = f()] = [1]; //x=1
  • 默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

    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
      
原文地址:https://www.cnblogs.com/websmile/p/11528108.html