Javascript 如何实现日期比较运算符?

Chr*_*isW 3 javascript datetime operator-overloading operators

这个答案说,

Date对象会做你想要的东西-构造一个每个日期,然后用它们进行比较><<=>=

我没有看到引用页面上提到的这个功能。

  • 这是特定于浏览器的行为,还是语言的标准功能?
  • 如果 Date 是一个 javascript“对象”,并且 javascript 不支持运算符重载,那么Date 对象上的>, <,<=>=运算符的这种行为是如何实现的?我的意思是,它是否定义在 上Date.prototype,是否因为定义了一些隐式转换(例如从对象到数字或字符串)而发生,它是否是添加到 Javascript 语言解释器/运行时的 Date 对象的特殊情况,或者是什么?

Jon*_*lms 5

每当您使用通常需要数字(加法、减法、更大/更低比较)的对象时,都会调用valueOf方法将对象转换为原始类型:

{ valueOf: () => 2 }.valueOf() // 2
//or not explicitly called:
+ { valueOf: () => 2 } // 2
//using the compare operator:
{ valueOf: () => 2 } < { valueOf: ()=>3 } //true as 2 < 3
Run Code Online (Sandbox Code Playgroud)

因此,当您比较日期时,也会发生这种情况。由于Date.prototype.valueOf方法返回自 1970 年以来的毫秒数,您可以使用它来比较两个日期...

new Date().valueOf();
//or
+new Date(); 
//or
new Date() < new Date();
Run Code Online (Sandbox Code Playgroud)