解构赋值
对象的解构赋值,用于从一个对象取值,相当于将所有可遍历的,但尚未被读取的属性分配到指定对象上面。
所有的键和它们的值都会复制到新对象上面
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 则这两个值会被忽略,不会报错