为什么要进行深拷贝
在 JavaScript 中,对象和数组都是引用类型,这意味着当你将一个对象或数组赋值给另一个变量时,实际上是将引用(地址)传递给了新变量。因此,如果你修改了新变量,原始对象或数组也会被修改。这可能会导致一些不希望出现的副作用,特别是当你处理复杂的数据结构时。
深度拷贝可以解决这个问题,因为它会创建一个新的对象或数组,该新对象或数组与原始对象或数组具有相同的值,但是它们在内存中是独立的。这样,当你修改新对象或数组时,原始对象或数组不会受到影响。
因此,深度拷贝在处理复杂的数据结构时非常有用,例如处理包含其他对象或数组的对象或数组,或者在需要对原始数据进行修改时使用。
以下是深度拷贝的代码
function deepClone(obj){
if(!(obj instanceof Array || obj instanceof Object)){
return obj;
}
// 判断数据类型是否为数组、对象,进行数据声明
var targetObj = obj instanceof Array ? [] : {}
for(const key in obj){
if(obj.hasOwnProperty(key)){
// console.log("key--->>>>>", obj[key]);
const value = obj[key];
if(value instanceof Array || value instanceof Object){
// 递归复制新的数据
targetObj[key] = deepClone(value);
}else{
targetObj[key] = value;
}
}
}
return targetObj;
}