深拷贝和浅拷贝

1.浅拷贝就是指拷贝数组或者对象的第一层,对于嵌套对象或数组,并不会进行深度复制,而是复制它们的引用。这意味着如果源对象的属性是对象或数组,那么目标对象中的相应属性将与源对象中的相同属性共享相同的引用。
 

let obj = [1,2,3,{a:4,b:{c:5}}}]
//浅拷贝
const copyObj =  Object.assign(obj)

console.log(obj)
obj[3].a =10
console.log(obj)
console.log(copyObj )


这里调用了object.assign实现浅拷贝,其实这里的话copyObj的对象其实引用obj的对象,这样的话obj[3].a改变数据的时候 copyObj的也会一起改变 也可以说是对象的引用

那怎么实现深拷贝呢
 

const deepObj = JSON.parse(JSON.stringify(obj))

其实浅拷贝也可以手写

 function deepCopy(obj) {
        if (typeof obj !== "object" || obj === null) {
          return obj; // 如果不是对象或数组,直接返回原始值
        }

        // 创建新的对象或数组
        const result = Array.isArray(obj) ? [] : {};

        // 遍历原对象或数组,并递归地进行深拷贝
        for (const key in obj) {
          result[key] = deepCopy(obj[key]);
        }

        return result;
      }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值