美文网首页
ES6.3--数组解构

ES6.3--数组解构

作者: flyingtoparis | 来源:发表于2017-09-18 14:31 被阅读0次

    数组的解构赋值

    1. 基本用法 模式匹配,只要等式的两边的模式相同,左边的变量就会被赋予相应的值。
    //ES5
    var a = 1;
    var b = 2;
    var c = 3;
    
    //ES6
    var [a,b,c] = [1,2,3];
    let [foo,[[bar],baz]] = [1,[[2],3]];  // foo = 1,bar = 2, baz = 3
    let [ , , third] = ['foo','bar','baz']; // third = 'baz'
    let [x, , y] = [1,2,3] // x = 1,y=3
    let [head,...tail] = [1,2,3,4]; // head = 1, tail = [2,3,4]
    
    
    1. 解构不成功,就是undefined
    let [x,y,...z] = ['a']; // x = 'a',y => undefined , z = []
    
    1. 不完全解构
    let [x,y] = [1,2,3];  // x = 1, y = 2
    let [a,[b],d] = [1,[2,3],4]; // a = 1, b = 2, d = 4
    
    
    1. 如果等号的右边不是数组(不是可遍历的结果)那么将会报错。
    let [foo] = 1;
    let [foo] = false;
    let [foo] = NaN,undefined,null,{},
    
    1. 数据结构具有iterator接口,都可以采用数组形式的解构赋值
    let [x,y,z] = new Set(['a','b','c']); // x = 'a', y = 'b', z = 'c'
    
    1. 解构赋值允许默认值
    var [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]=[null]    // x=null
    

    ES6内部使用严格相等运算符(===)判断一个位置是否有值,如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined

    7.如果默认值是一个表达式,那么表达式是惰性求值的,即只有在用到的时候才会求值。

    function f(){
      console.log('aaa')
    }
    let [x=f()]=[1];
    //因为x能取到值,所有f根本不会执行
    

    8.默认值可以引用解构赋值的其他变量,但是该变量必须已经声明了

    let [x=1,y=x] = [];  //x=1;y=1;
    let [x=y,y=1]=[];  // 报错
    

    相关文章

      网友评论

          本文标题:ES6.3--数组解构

          本文链接:https://www.haomeiwen.com/subject/dghbsxtx.html