参考: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; }
原文:https://www.cnblogs.com/cat66/p/11338791.html