JS中new Date()对象意外同步,两个日期值为何一致?
问题分析与解决
你遇到的问题核心是忽略了Date对象是引用类型。
JavaScript里的Date属于引用类型,当你把today变量传入addOneYear函数时,函数参数date和外部的today指向的是同一个Date实例。调用date.setFullYear()方法时,会直接修改这个共享的实例本身——这就导致最后obj.today和obj.oneYear指向的都是被修改后的同一个日期对象,自然值完全相同。
解决办法
有两种简单的修复方式:
方式1:在函数内部复制新的Date对象
修改addOneYear函数,先基于传入的日期创建一个新的Date实例,再对新实例进行修改,避免影响原对象:
function addOneYear(date) { // 复制原日期,生成新的实例 const newDate = new Date(date); newDate.setFullYear(newDate.getFullYear() + 1); return newDate; }
方式2:传入参数时直接复制
保持函数不变,在调用时传入原日期的副本:
obj = { today: today, oneYear: addOneYear(new Date(today)) }
内容的提问来源于stack exchange,提问作者Maik Lowrey
相关产品推荐
相关产品推荐

