1.浅拷贝
两个或多个对象指向同一个内存地址,如果其中某个对象变量的值发生改变,另一个对象相应的值也会发送改变,
比如Object.assgin()合并多个对象,只要源对象里某个值是对象,则这个对象发生的任何改变就会在目标对象里有所体现
2.深拷贝
值和地址都复制,其中任意一个对象的值改变,另外的对象对应的值不会改变,
1)可以通过先转为JSON.stringify(),再转为JSON.parse()实现,但这个方法只能复制对象和数组,不能复制函数
缺点:会忽略undefined和symbol、不能序列化函数
2)jQuery中$.extend([deep],target, object1[,objectN])deep默认为false(浅拷贝),true是深拷贝,并且false不能显示的写出来
缺点:代价较大
3)递归循环
function deepClone(obj){
let newObj={};
for(var key in obj){
if(Object.prototype.hasOwnProperty.call(obj,key)){
if(typeof obj[key] == ‘object’)
newObj[key]=deepClone(obj[key]);
}else{
newObj[key]=obj[key]
}
}
return newObj;
}
缺点:不能拷贝函数