1.二者的区别
浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
let a1=[1,2,3];
let a2=[...a1];
扩展符赋值属深拷贝,如果a1的值发生改变,a2的值也会相应的发生改变。
let a1=[1,2,3];
let a2=[...a1];
let a3=Object.assign(a1,a2);
Object.assign();是深拷贝,Object.assign(a1,a2);与扩展运算符相同,在a1,a2合并的同时,a1,a3的值都会发生相应的改变。a1中的某一个数值更改,a3也会相应更改。但a2不受影响。a2中的某一个数值更改,a1,a3也会相应更改。
let a3=Object.assign({},a1,a2);
这种情况a2更改就不会影响a1.