深浅复制:也叫深浅克隆-拷贝。
是前端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标签中引入
使用方法如下:
以上为实现深浅复制的常用方法