JavaScript如何实现深浅复制

深浅复制:也叫深浅克隆-拷贝

是前端JS中重要的知识点以及前端求职面试中经常遇到的问题

因为对象的引用类型特征在赋值时是拷贝地址,还是同一个,有些时候,为了避免相互影响,希望拷贝一个新的值

例如创建一个对象lucy,当我们需要克隆一个lucy时,最笨的方法就是利用for..in去遍历lucy(浅复制方法一),然后给新对象(假设为lily),lily为新的空对象。

lily的属性和方法和lucy一模一样。这种叫做”浅复制”,即二者的属性和方法一样。

但这并不算真正意义上的复制,应该还要检测lucy有没有嵌套的引用类型,如果有还要遍历子对象,一层层遍历,这就叫深复制

实现深复制的方法

1.手写递归(深复制方法一)

首先封装一个克隆函数clone,有两个参数target,source(这里的函数clone和形参target,source可以随便取名),利用instance检测source是否含有子对象,然后for..in深层遍历source赋值给target,最后打印结果和lucy一致。 

 但在实际开发中,无需手动去实现深浅复制,往往只需借助系统内置方法或者第三方库就能轻松实现

利用系统内置Object.assign()实现浅复制(浅复制方法二),如下:

2.利用JSON实现深复制(深复制方法二): 

3.利用第三方lodash库里面的方法来实现深复制(深复制方法三)

使用lodash需要下载lodash库或者链接lodash库的地址在script标签中引入

使用方法如下:

 以上为实现深浅复制的常用方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值