如何实现深拷贝

129 阅读1分钟

我们对 obj 进行赋值的时候 都是 赋值的是 地址的引用,当我们修改一个值的时候 都会受影响,那么我们可以通过 检查类型 和递归的形式 对地址进行深拷贝 在进行赋值的时候,就不会对之前的代码有影响了

let obj = {
    name: '小崔',
    age: 18,
    childName :{
        name: '小磊'
    }
}
function deepCopy(obj = {}){
    if(typeof obj !== 'object' || obj == null){
        return obj
    }
    let result
    if(obj instanceof Array){
        result = []
    }else{
        result = {}
    }
    for(let key in obj){
        if(obj.hasOwnProperty(key)){
            result[key] = deepCopy(obj[key])
        }
    }
    return result
    
}
obj.name // '小崔'
let obj2 = deepCopy(obj)

obj2.name = 'hi'
obj2.name // 'hi'