对象的解构赋值(笔记)

2019-05-04  本文已影响0人  灰灰_82a6

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

猜你喜欢

热点阅读