JS深拷贝与浅拷贝

JS深拷贝与浅拷贝,第1张

说一下我的理解

深拷贝:新对象与旧对象没有关系,新对象的变量的值改变不会对旧对象变量的值产生影响,反之亦然

浅拷贝:新的对象的变量会用到旧对象的变量对应的地址,新对象的变量值改变时,旧对象的值也跟着改变,反之亦然

深拷贝

方法1 :

const 新对象= JSON.parse(JSON.stringify(旧对象))

缺点:数据类型为function或者数据值为undefined情况下无法复制

方法2

const 新对象= Object.assign({},(旧对象))

缺点:只能深拷贝一级属性,二级以上属性(如:数组)就是浅拷贝

方法3:扩展运算符

const 新对象 = {...旧对象}

缺点:与方法2一样

方法4:递归

function CloneDeep(data){
    const newDate = Array.isArray(data) ? [] : {}
    for( let key in data) {
        if(data[key] && typeof data[key] === "object") {
            newDate[key] = CloneDeep(data[key])
        }
        else{
            newData[key] = data[key]
        }
    }
}

缺点:除了麻烦一点,没有缺点

补充:导lodedash包,用cloneDeep函数也可以实现深拷贝

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/940150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存