谁能解释这种意外行为?
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((,每个实例都是唯一的 (同一构造函数的两个实例仍然不同 彼此(,这就是它们在比较时不相等的原因。