JavaScript中asset_purchase_date值自动变更问题求助
问题分析与解决方案
嘿,这是个很典型的JavaScript引用类型陷阱问题,我来帮你捋清楚!
问题根源
JavaScript里的Date对象属于引用类型,当你把asset_purchase_date传给addMonths函数时,传递的并不是这个日期对象的副本,而是指向它的引用。所以你在addMonths里调用date.setMonth()时,实际上直接修改了原始的asset_purchase_date对象,这就是为什么它的数值会莫名其妙改变。
修复方案
解决方法很简单:在addMonths函数里先创建原始日期对象的副本,再对副本进行修改,这样就不会影响到原对象了。
修改后的addMonths函数如下:
function addMonths(date, months) { // 创建原始日期的独立副本 const newDate = new Date(date); newDate.setMonth(newDate.getMonth() + months); return newDate; }
为什么这样有效?
new Date(date)会基于传入的日期对象创建一个全新的Date实例,这个副本和原始对象是完全独立的。后续对newDate的任何修改都只会作用在这个副本上,不会影响到最初的asset_purchase_date。
你也可以用其他方式创建日期副本,比如:
// 用getTime()获取时间戳来创建新日期 const newDate = new Date(date.getTime());
额外提醒
在JavaScript中,除了基本类型(字符串、数字、布尔值等)是值传递外,所有对象类型(包括Date、数组、普通对象)都是引用传递。如果不想修改原对象,一定要记得先创建副本再操作哦!
内容的提问来源于stack exchange,提问作者Amer Hamid
相关产品推荐
相关产品推荐

