美文网首页
对象的解构赋值(笔记)

对象的解构赋值(笔记)

作者: 灰灰_82a6 | 来源:发表于2019-05-04 10:45 被阅读0次

    1.对象是匹配同名属性进行解构赋值的。

    let { bar, foo } = { foo: 'aaa', bar: 'bbb' }; //bar='bbb',foo='aaa' 
    //解构失败,变量的值等于undefined。
    let { baz } = { foo: 'aaa', bar: 'bbb' }; //baz undefined 
    //把console.log赋值到log变量
    const { log } = console;
    

    2.解构的变量可以重新命名 ,解构时先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

    let {a:num}={a:1}; //num=1 ,如果输出a会报错
    

    3.对象和数组一样,可以设置默认值。
    4.对象可以取到继承的属性

    嵌套结构的小例子

    属性值如果也是一个对象或者数组,在为属性值进行解构赋值时,前面的属性属于模式,不会赋值。例如下面的loc: { start } ,loc是模式,不是变量,要单独对loc解构赋值。

    const node = {
      loc: {
        start: {
          line: 1,
          column: 5
        }
      }
    };
    
    let { loc, loc: { start }, loc: { start: { line }} } = node;
    

    嵌套赋值的小例子

    const obj={};
    const b={x:1,y:2};
    ({x:obj.num1,y:obj.num2}=b) //obj={num1: 1, num2: 2}
    

    注意点

    1.如果对一个已经定义的变量进行解构赋值,要将解构赋值的整个语句放在()里面。

    let x;
    ({x} = {x: 1});
    

    如果不用括号包裹,{x}将会解析成一个代码块,导致语法报错。

    2.由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

    let arr = [1, 2, 3];
    let {0 : first, [arr.length - 1] : last} = arr;
    first // 1
    last // 3
    

    相关文章

      网友评论

          本文标题:对象的解构赋值(笔记)

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