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

为何Date()变量被修改?如何规避该问题?

问题解答

为什么修改mySecondDate会影响myFirstDate?

在JavaScript中,Date是引用类型。当你执行mySecondDate = myFirstDate这类赋值时,并没有复制整个Date对象,只是把原对象在内存中的引用地址复制给了新变量。这就导致myFirstDate、mySecondDate、myThirdDate其实指向的是同一个内存对象——不管用哪个变量调用setHours(),都是在修改同一个对象,所以所有变量都会同步显示变化。

如何让myThirdDate保留myFirstDate的初始值,同时保持myFirstDate不变?

关键是要创建Date对象的独立副本,而不是直接复制引用。推荐两种可靠的方法:

  • 方法一:利用Date构造函数创建副本
    把原Date对象传入新的Date构造函数,会自动生成一个独立的新对象:

    // 初始化原日期
    const myFirstDate = new Date();
    // 直接创建初始值的副本给myThirdDate
    const myThirdDate = new Date(myFirstDate);
    // 临时变量也用副本,避免修改原对象
    let mySecondDate = new Date(myFirstDate);
    
    // 修改临时变量的小时数,不会影响原对象和myThirdDate
    mySecondDate.setHours(0);
    
  • 方法二:通过时间戳创建副本
    先用getTime()获取原对象的毫秒级时间戳,再用这个时间戳生成新的Date对象:

    const myFirstDate = new Date();
    const myThirdDate = new Date(myFirstDate.getTime());
    let mySecondDate = new Date(myFirstDate.getTime());
    
    mySecondDate.setHours(0);
    

这样操作后,myFirstDate会保持最初的初始值,myThirdDate也和初始值完全一致,修改mySecondDate只会改变它自身。

内容的提问来源于stack exchange,提问作者Meeky333

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:55:32