手写JS深拷贝

69 阅读1分钟

核心代码

 * 深拷贝
 * @param {*} obj 要拷贝的对象
 * @returns 
 */
function deepCopy(xobj){
    //如果是值类型直接返回
    if(typeof(xobj)!='object'||xobj==null){
        return xobj
    }
    let result
    //初始化判断要拷贝数组还是对象
    if(xobj instanceof Array){
        result=[]
    }else{
        result={}
    }
    // 遍历要拷贝的对象递归找到值类型返回
    for(let key in xobj){
        if(xobj.hasOwnProperty(key)){
            result[key]=deepCopy(xobj[key])
        }
        
    }
    return result
}

测试

let targetObj={
    name:"zhangsan",
    age:17,
    like:["读书","跑步"],
    test:{
        name:"test",
        like:["test1","test2"],
        obj:{
            name:"test"
        }
    }
}

let obj=deepCopy(targetObj)
obj.age=18
console.log(targetObj.age)