对象的解构赋值,用于从一个现有的对象取值,将其中所有可遍历但尚未赋值的属性,分配到指定的对象上面,所有的键和他们的值都会“
浅拷贝”到新对象上面。
//解构赋值
let {x,y,...z} = {x:1,y:2,a:3,b:4,c:{ca : 5}}
//结果如下:
x //1
y //2
z //{a:3,d:4,c:{ca:5}}
在上面的代码中,等号右边的对象的属性x,y,a,b,c都是可遍历的,但是x和y已经被读取,所以z接收的是剩下的几个属性。
需要注意的是,在进行对象的解构赋值时,语法上有如下要求:
1. 要求等号右边必须是对象。如果等号右边不是对象的话,编译器会尝试将等号右边的值转换为对象,如果转换失败的话,会返回运行时错误。根据JavaScript的类型转换知识,我们得出结论:如果在进行对象解构赋值时,等号右边是undefined和null的话,会报错,因为二者不能转换成对象。
// 因为转换对象失败,而报错的解构赋值
let { x, y, ...z } = null; // 运行时错误
let { x, y, ...z } = undefined; // 运行时错误
2. 要求解构赋值必须是最后一个参数,否则报错。
// 因为解构赋值不是最后一个参数而报错
let { ...x, y, z } = obj; //