一、理解深拷贝和浅拷贝
(1)JS中浅拷贝与深拷贝对应,是由JS的原始数据类型和引用数据类型决定的。
(2)对于原始类型数据,它的值存放在栈内存中,对于引用类型数据,它的栈中仅存储了一个数据存放的地址,真正的数据存放在堆内存中。
(3)当我们对原始类型数据进行赋值操作时,将栈内存中的值赋值给了被赋值对象,对被赋值对象进行运算并不对原始值产生副作用。当对引用类型数据进行赋值时,将栈中的存放的数据地址赋值给被赋值对象,被赋值对象指向同样的堆内存,修改被赋值对象对原对象产生副作用。
二、实现深拷贝
function copy(obj1,obj2){
if(obj2){
obj2={};
}
for(let attr in obj1){
if(obj1.hasOwnProperty(attr)){
if((typeof (obj1[attr])) =="object"&& obj1[attr]!=null){
if(Object.prototype.toString.call(obj1[attr])=='[object Array]'){
obj2[attr]=[]
}else{
obj2[attr]={};
}
copy(obj1[attr],obj2[attr]);
}else{
obj2[attr]=obj1[attr];
}
}
}
return obj2;
}