如何手动实现深度拷贝

79 阅读1分钟

为什么要进行深拷贝

在 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;
}