修改一个值,另一个值也被影响!?原来是 JS 深浅拷贝的问题

在JavaScript中,遇到一个问题:修改一个对象的值时,另一个对象的相应值也随之改变。这源于对深浅拷贝的理解不足。初始设置的A和B对象从C赋值,导致它们共享同一引用。通过学习,了解到直接赋值实际上是传递对象引用。解决方法是使用浅拷贝(如Object.assign或解构赋值)或深拷贝(如JSON.parse(JSON.stringify)或递归实现),以确保修改不会影响原始对象。对于多层级数据,深拷贝更为适用。
摘要由CSDN通过智能技术生成

需要达到这样子的一个需求:
编辑框需要元素有:时间选择器,文本框,一个下拉选择组
需要每次离开页面时候判断时候和初始值一致,若不一致则跳出提示是否需要保存。

一开始我的想法是 so easy!这次估计自己很快完美完成任务了(心里窃喜=W=)。
一顿操作后的我:设定初始值 A 和数据 B 作对比,两者一开始都是由 C 赋值的。**但是后面 B 每次改动 A 部分数据也对应改动,没有达到可以对比的目的。**部分代码如下:
在这里插入图片描述
我十分疑惑,为什么 A 也会跟着 B 一起改变?我没有在这里之外的地方赋值过了(一头雾水)
后续问了小伙伴才知道这里还涉及到了 JS 浅拷贝和深拷贝 的知识点了

因为我上图中的 points 是一个对象,直接赋值的话是赋值地址过去的。
我一开始给 A 和 B 都直接赋值,其实这时候就是把 C 的地址直接给了这两个玩意儿了!!!
那 B 改变时候 A 当然也跟着改变呀,因为是指向 C 的地址。

对于我现在的情况来说,只是一层Object [{key: '', type: ''},{key: '', type: ''}],用浅拷贝就好了~浅拷贝包括 Object.assign

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值