Javascript new Date(),比较混淆



谁能解释这种意外行为?

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

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

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

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

你会得到true. 在这种情况下,>=<=运算符的=部分使语句为真(如上例所示(。

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

>=<=将首先将 Date 对象强制转换为数字

简化的结果示例:

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

对于第一种==情况,您还可以强制强制进行数字操作:

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

Date(( 是对象。

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

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

所以对象 A == 对象 B 将返回 false。

但是>=<=比较对象的值,只要值相同,它就会返回 true。

这就是你比较日期 i 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

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

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

正如它所说:

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

最新更新