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

为何JavaScript中日期对象值相等但===判断不成立?

Date对象用===判断不生效的原因

问题场景

以下是处理日期的JavaScript代码:

let startDate = new Date(toolOrder.jsAppStartDate.getTime()); // 克隆日期对象
startDate.setDate(startDate.getDate() - Math.floor((days - 1) / 2)); // 减去若干天
console.log(toolOrder.jsAppStartDate); // 输出: Date Thu Sep 21 2023 00:00:00 GMT+0200 (Central European Summer Time)
console.log(toolOrder.jsAppStartDate.getTime()); // 输出: 1695247200000
console.log("--------------");
for (let index = 0; index < days; index++)
{
    console.log(startDate);
    console.log(startDate.getTime());
    // ... 绘图代码 ...
    startDate.setDate(startDate.getDate() + 1); // 增加一天
    if(startDate === toolOrder.jsAppStartDate) // 判断是否到达起始日期
    {
        console.log("Dates match");
        startDate = new Date(toolOrder.jsAppEndDate.getTime());
    }
}

循环前日志输出:

Date Thu Sep 21 2023 00:00:00 GMT+0200 (Central European Summer Time)
1695247200000
---------------

循环日志输出:

Date Mon Sep 18 2023 00:00:00 GMT+0200 (Central European Summer Time)
1694988000000 
Date Tue Sep 19 2023 00:00:00 GMT+0200 (Central European Summer Time)
1695074400000
Date Wed Sep 20 2023 00:00:00 GMT+0200 (Central European Summer Time)
1695160800000
Date Thu Sep 21 2023 00:00:00 GMT+0200 (Central European Summer Time)
1695247200000
Date Fri Sep 22 2023 00:00:00 GMT+0200 (Central European Summer Time)
1695333600000

可见循环第3次时两个日期的时间戳完全匹配,但if(startDate === toolOrder.jsAppStartDate)条件不生效;改用if(startDate.getTime() === toolOrder.jsAppStartDate.getTime())则正常触发。


核心原因

  1. 引用类型与原始类型的区别
    JavaScript里Date属于引用类型,而getTime()返回的是原始数值类型(毫秒级时间戳)。

  2. 严格相等运算符===的判断逻辑

    • 对于引用类型,===比较的是对象在内存中的引用地址:只有当两个变量指向同一个对象实例时,才会返回true。
    • 对于原始类型,===比较的是值本身:只要值相等,就返回true。
  3. 结合代码分析
    你通过new Date(toolOrder.jsAppStartDate.getTime())克隆出了startDate,它是一个全新的Date实例,和toolOrder.jsAppStartDate在内存中是两个独立的对象——哪怕两者的时间值完全一致,它们的引用地址也不相同,所以startDate === toolOrder.jsAppStartDate必然返回false。
    而调用getTime()后,两者返回的都是数值类型的时间戳,只要数值相等,===就会返回true,条件也就正常生效了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:05:33