深拷贝(JSON.stringfy()有坑)

27 阅读1分钟

``

const copyObj = (obj = {}) => { 
    //变量先置空
    let newobj = null;
    //判断是否需要继续进行递归 
    if (typeof (obj) == 'object' && obj !== null) { 
        newobj = obj instanceof Array ? [] : {}; 
        //进行下一层递归克隆 
        for (var i in obj) { 
            newobj[i] = copyObj(obj[i]) 
        } 
    //如果不是对象直接赋值 
    } else newobj = obj; 
        return newobj; 
    } 
    对象浅拷贝时,分清对象展开运算符和Object.assign的区别 
    let aa = { a : 1, b : 2, c : 3}; 
    let bb = Object.assign(aa, {d : 4}); 
    // 修改aa 
    delete aa.a; 
    // 结果bb也发生了变化 
    console.log(bb);
    // {b: 2, c: 3, d: 4}
    let aa = { a : 1, b : 2, c : 3}; 
    // 解法1 
    let bb = Object.assign({}, aa, {d : 4}); 
    // 解法2 
    let cc = {...aa, d : 4}; 
    // 修改aa 
    delete aa.a; 
    console.log(bb); 
    // {a: 1, b: 2, c: 3, d: 4} 
    console.log(cc); 
    // {a: 1, b: 2, c: 3, d: 4}