js实现深拷贝

2022-07-12  本文已影响0人  5cc9c8608284

1.官方新推出的structuredClone方法,可以直接实现对一个对象的深拷贝,首选,兼容性还不是很友好,IE目前还没有支持
2.递归实现深拷贝

//函数拷贝
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;
}

let o1 = {
    name: 'o1',
    friends: {
        name: 'Ann'
    }
}
let o2 = copyObj(o1);
console.log(o2.friends == o1.friends); //false

3.使用JSON.stringify将对象转换为字符串,然后再通过JSON.parse还原对象

这个方法要慎重使用,它在处理date对象和NaN,undefined和null还有函数类型的时候,会出错,具体可以参考这篇文章

4.使用lodash的cloneDeep方法

上一篇下一篇

猜你喜欢

热点阅读