浅拷贝与深拷贝的区别与实现

浅拷贝与深拷贝

浅拷贝只复制对象的顶层属性(原对象的内存地址),而深拷贝会递归地复制对象及其所有嵌套属性。

实现:

浅拷贝

使用扩展运算符 (...) 或 Object.assign() 方法可以实现浅拷贝(但目标对象只有一层的时候,是深拷贝)。这两个方法都会创建一个新对象,并复制原对象的可枚举的顶层属性。

例如:

const original = { foo: 'bar', nested: { a: 1 } };
const shallowCopy = { ...original };

shallowCopy 将包含 { foo: 'bar' },但 nested 属性将指向原对象的引用。

深拷贝

要实现深拷贝,需要递归地遍历对象并复制其所有属性,包括嵌套对象。可以使用 JSON 序列化和反序列化(结合使用JSON.parse()和JSON.stringify())或第三方库(如 lodash.cloneDeep())来实现深拷贝。

例如:

const original = { foo: 'bar', nested: { a: 1 } };
const deepCopy = JSON.parse(JSON.stringify(original));

deepCopy 将包含 { foo: 'bar', nested: { a: 1 } } 的副本,并且 nested 属性指向的是新创建的对象。

区别:

  • 浅拷贝只复制顶层属性,而深拷贝会递归地复制所有属性。
  • 浅拷贝创建的新对象与原对象共享嵌套对象的引用,而深拷贝创建的新对象完全独立于原对象。
  • 浅拷贝的性能通常优于深拷贝,因为不需要递归遍历对象。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值