对象的扩展-02

解构赋值

对象的解构赋值,用于从一个对象取值,相当于将所有可遍历的,但尚未被读取的属性分配到指定对象上面。

所有的键和它们的值都会复制到新对象上面

let {x , y , ...z } = {x:1,y:2, a:3 , b:4 };

x  // 1

y  // 2

z  // {a:3,b:4 }

由于解构赋值要求等号右边是一个对象,所以如果等号右边是 undefined 或 null 就会报错,因为他们无法转为对象

let {x , y , ...z }  = null;  // 报错

let {x , y , ...z }  = undefined;  // 报错

解构赋值必须是最后一个参数,否则报错

let {...x , y , z } = obj  // 报错

解构赋值的复制是浅复制

解构赋值不会复制继承自原型对象的属性

扩展运算符 ( ... )

用于取出参数对象,所有可遍历属性,并将其复制到当前对象中

let z = { a:3, b: 4};

let n = { ...z };

 n  // { a:3, b: 4}

等同于 Object.assign()方法

扩展运算符可用于合并两个对象

let ab = { ...a , ...b };

如果用户自定义属性放在扩展运算符后面,则扩展运算符的同名属性会被覆盖

let  obj = { ...a , x: 1, y: 2 };

与数组扩展运算符一样,对象的扩展运算符后面也可以带有表达式

const obj = {

  ...(x > 1 ? {a: 1} : {},

  b: 2

}

如果扩展运算符的参数是null或 undefined 则这两个值会被忽略,不会报错

 

posted @ 2019-12-12 22:03  jeff_zhu  阅读(168)  评论(0编辑  收藏  举报