【问题标题】:Javascript new Date(), compare confuse [duplicate]Javascript new Date(),比较混淆[重复]
【发布时间】:2018-01-09 23:37:24
【问题描述】:

谁能解释这种意外行为?

console.log(new Date() == new Date()); // false
console.log(new Date() >= new Date()); // true
console.log(new Date() <= new Date()); // true

【问题讨论】:

  • 那些Dates 可能不一定相同,因为它们是单独创建的。如果在顶部创建1,然后在上面进行比较,结果是什么?

标签: javascript


【解决方案1】:

== 比较器比较对象引用,两个不同的对象永远不会相等。

但是,关系比较器将比较日期的数值(基础时间戳)。因此,如果您尝试过

new Date().getTime() == new Date().getTime()

你会得到true。在这种情况下,&gt;=&lt;= 运算符的 = 部分使语句为真(如上例所示)。

【讨论】:

  • 那为什么第二行和第三行都打印true
  • @armnotstrong 因为两个对象的创建距离足够近以表示同一时间,所以&lt;=&gt;== 部分匹配。
  • 傻我,忘了=部分
【解决方案2】:

第一个是比较两个不同对象的相等性。

&gt;=&lt;= 将首先将 Date 对象强制为 Number

简化的结果示例:

{} == {} // false    
41765490 <= 41765490 // true
41765490 >= 41765490 // true

对于== 的第一种情况,您还可以强制强制执行编号:

+new Date() == +new Date() // true (assuming no lag between creating both)

【讨论】:

    【解决方案3】:

    Date() 是对象。

    new Date() 会生成一个对象(我们称之为a)

    == new Date() 将生成另一个对象(称为 b)

    所以对象 a == 对象 b 将返回 false。

    但是&gt;=&lt;=会比较对象的值,只要值相同就会返回true。

    【讨论】:

      【解决方案4】:

      这是你在 Javascript 中比较日期的方式。

      (date1.getTime() === date2.getTime())

      var date1 = new Date();
      var date2 = new Date();
      console.log(date1.getTime() === date2.getTime()); // true
       console.log(date1 >= date2); // true
       console.log(date1 <= date2); // true
         

      【讨论】:

        【解决方案5】:

        我用谷歌搜索,我在 Stack Overflow 中找到了响应:

        https://stackoverflow.com/a/41980287/2520689

        正如它所说:

        使用构造函数作为 new Date(),每个实例都是唯一的 (同一个构造函数的两个实例仍然不同 彼此),这就是它们在比较时不相等的原因。

        【讨论】:

          猜你喜欢
          • 2016-03-19
          • 2021-04-09
          • 2013-01-01
          • 2013-04-29
          • 1970-01-01
          • 2017-01-24
          • 1970-01-01
          • 2016-02-24
          • 2015-10-04
          相关资源
          最近更新 更多