美文网首页
变量的结构赋值

变量的结构赋值

作者: TingsLee | 来源:发表于2017-12-03 17:23 被阅读0次

    合理使用ES6中变量的结构赋值会改变代码的整洁度和流畅性。

    1. 数组的结构赋值
        let obj = {name: 'li'};
        let [a, b, c] = [1, 2, 3];
        let [head,  ...tail] = [1, 2, 3, 4];  //head: 1, tail: [2, 3, 4];
        let [a, b, c] = [2, [1, 2], 3]; // a: 2, b: [1, 2], c:3
        let [foo = true] = []; //可以设置默认值:foo: true
        let [a , b = a.name] = [obj]; //a: {name: 'li'}, b: 'li' //连环取值
    

    1.如果结构赋值不成功,变量值就等于undefined
    2.只要某种数据结构具有Iterator接口,都可以采用数组形式的结构赋值
    3.在设置默认值时,ES6内部使用===undefined做判断,确定一个位置是否有值
    4.虽然数组的结构赋值可以嵌套,但是为了确保易读性, 要控制嵌套层级

    1. 对象的结构赋值

       let obj = {p: ['hello', {y: 'world'}]}
       let {foo, bar} = {foo: 'aaa', bar: 'bbb'};  //foo: 'aaa', bar: 'bbb'
       let {foo: FOO, bar: BAR} = {foo: 'aaa', bar: 'bbb'}; // FOO: 'aaa'. BAR: 'bbb'
       let {p:[x, {y}]} = obj; // x: 'hello', y : 'world'
       let {x = 3} = {}; //x: 3
      

    1.在设置默认值时,ES6内部使用===和undefined做判断,确定一个位置是否有值
    2.虽然对象的结构赋值可以嵌套,但是为了确保易读性, 要控制嵌套层级

    1. 函数参数的结构赋值

       function move1({x=0, y=0} = {}) {
         return [x, y];
      }
      function move2({x, y} = {x: 0, y: 0}) {
        return [x, y];
      }
      

    以上两种写法是有区别的:
    move1的参数是一个对象,通过对这个对象的结构赋值,得到x和y的值;
    move2的参数时就是单独的x和y,你传入一个对象参数后,x、y通过结构解析,获得相应的值;
    可以通过一下调用的不同深刻理解:

      move1({x: 3}); // [3, 0]
      move2({x: 3}); // [3, undefined]
      move1({}); //[0, 0];
      move2({}); //[undefined, undefined]
    
    1. 其他问题

    除上述常用赋值形式外,还有字符串、数值、布尔值的结构赋值,这些比较简单,如有用到可自行查询。
    结构赋值的解析有一定的复杂性,有时要利用圆括号避免歧义。但是什么时候添加圆括号也是意见麻烦的事情,所以应尽量避免造成这种情况。

    相关文章

      网友评论

          本文标题:变量的结构赋值

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