深拷贝的两种实现:
1、递归深拷贝
这个函数中,申请了一块新的内存,将数组的值复制过去。
function deepCopy(source) {
let result= null;
if(isArrayFn(source)){
result = [];
}else if(source instanceof Object){
result = {};
}else{
result = source;
}
for (let key in source) {
//防止key遍历source原型链中的属性
if(source.hasOwnProperty(key)){
result[key] = typeof source[key]==='object'? deepCopy(source[key]): source[key];
}
}
return result;
};
2、借助JSON实现深拷贝
JSON.stringify()被调用后,会生产一个JSON对象出来,这个JSON对象在内存中是要占空间的。
所以,相当于在一片新的内存中写入了原有的数据,所以用JSON可以实现深拷贝。
function deepCopy2(source) {
if(typeof source === "object"){
return JSON.parse(JSON.stringify(source));
}
}
参考文章: