参考:https://www.cnblogs.com/echolun/p/7889848.html
主要出现原因是:JS有数组和对象,是引用类型的。引用类型一般指引用命名空间,相当于指针。所以按平时使用的方式就出现了浅拷贝。
浅拷贝:对象A和对象B共用同一份数据。改了A,B获取到的值也一起改了
深拷贝:B完全复制一份A出来。更改A不会对B有影响。
深拷贝的思想:复制对象或数组里的所有数据到新的返回对象里。通过递归和循环遍历属性(键)的方式获取到值和复制
function deepClone(obj){
let newObj = Array.isArray(obj)?[]:{};
if(obj && typeof obj === "object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
if(obj[key] && typeof obj[key] === "object"){
newObj[key] = deepClone(obj[key]);
}else{
newObj[key] = obj[key];
}
}
}
}
return newObj;
}