js Object.assign 浅拷贝场景实现

本文通过一个实际项目案例解析了使用Object.assign方法时遇到的问题,揭示了浅拷贝特性导致的数据引用问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在面试的时候,总会有面试官会问一些浅拷贝和深拷贝的问题,以及会提到Object.assign是浅拷贝还是深拷贝,答案当然很明确:浅拷贝,那么深浅拷贝对于这个方法应用场景有什么影响呢?

今天在项目中碰到个使用Object.assign的场景,我很随意的把两个需要整合的对象写进了两个参数中

alreadyAuditListQuery: {
					pageNumber: 1,
					pageSize: 20,
					approveStatus: true
},

 let query = Object.assign(this.alreadyAuditListQuery,{
		dateRange: this.dateRange
    })

dataRange是个对象 里面有begin和end

看得出来我在做分页,第一次分页的query很正常,但是当我把dateRange变为null后 打印出来 begin和end并没有被覆盖掉,按道理我的dateRange为null,是不会存在begin和end的呀

而当我把Object.assign里的参数位置对调之后就没有begin和end两个属性了 也就是dateRange为null生效了,达到了我的效果。

总结:出现这个问题的原因在于Object.assign(target,source)方法是个浅拷贝,也就是把source合并到target上去,指针指向并没有变,那我第二次再调用这个方法的时候第一个参数由于是个全局变量,已经被改变了,那么所以我把两个参数对调,把第一个参数写作临时变量,那每次调用都有独立的内存,就解决问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值