深拷贝和浅拷贝

前段时间因为复制的原因导致我的数据有问题,遂与小姐妹论之,她说她之前也遇到过这种问题,然后从别人那里copy了代码解决了这个问题,据说这还有名词解释叫做深拷贝,于是我就记在了心上,等我加班不这么猛了我就来学习一手这些东西(连续加班五个月的吐血吐槽[哭唧唧]})

1.浅拷贝

为啥要叫浅拷贝呢,顾名思义就是复制的很浅呗,那到底是怎么个浅法呢,度娘说拷贝就是拷贝指向对象的指针。

哦,意思就是说我们平时的直接赋值
const newObj = oldObj
这样做看似是直接把老对象的东西赋值给了新对象,但是实际上我们只是创建了一个新对象,然后复制了指向这个对象的指针,然后将这一堆指针存在了新对象里,并不是真的拥有了对象里的属性,倘若你想要对新对象里的属性进行修改,必然就会顺藤摸瓜把老对象里的属性更改了。
这就好像名媛团们发朋友圈,她们跑去lv店里拍个照,然后发个朋友圈,让大家是她们要买的,结果朋友们约出来让她们背上lv看看,怎么办呢,lv还在专柜里躺着呢,要动也只能动专柜里那个跟照片里一样的那个了hhh

2.深拷贝
那深拷贝又是怎么个意思呢?
其实就是创建了一个新对象,然后照着原来的对象挨个自己创建了跟老对象一样的属性,因此在这种情况下,你就可以随意的更改新对象里的属性,因为这跟老对象没有关系了。
还是按照上面那个例子来说,名媛们买不起那个lv,于是自己复刻了一个一模一样的包,就可以背着到处跑啦

回到代码上来说,想要实现深拷贝其实有几种办法
(1)使用循环的方式,跑完整个流程复制一个一模一样的对象(循环的方式很多不多写)
(2)更为简单的办法就是使用JSON的方式转换一下

let data = JSON.stringify(oldObj);//将对象转换为json字符串形式
let newObj= JSON.parse(data);//将转换而来的字符串转换为原生js对象

今日份输出o了

原文地址:https://www.cnblogs.com/fdd-111/p/13858338.html