You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:55:13