JavaScript如何评估大于和小于操作?

Str*_*tly 8 javascript

更具体地说,操作大于或等于.

逻辑上n >= k应该是等于n > k || n == k但似乎并非如此.

为什么这样:

var d1 = new Date(2018, 1, 16);
var d2 = new Date(2018, 1, 16);
console.log(d1 > d2);
console.log(d1 < d2);
console.log(d1 == d2);
console.log(d1 >= d2);
console.log(d1 <= d2);
Run Code Online (Sandbox Code Playgroud)

生产false,false,false,true,true

Jon*_*lms 8

 console.log(d1 > d2);
 console.log(d1 < d2);
Run Code Online (Sandbox Code Playgroud)

这些首先将它们转换为数字,然后进行比较.由于它们同时存在,因此它们具有相同的数字,因此一个不大于或小于另一个.

 console.log(d1 == d2);
Run Code Online (Sandbox Code Playgroud)

这将检查日期引用是否相同.但它们不是两个不同的对象.

 console.log(d1 >= d2);
 console.log(d1 <= d2);
Run Code Online (Sandbox Code Playgroud)

这些比较数字,但也相等.如果你这样做:

 console.log(+d1 === +d2);
Run Code Online (Sandbox Code Playgroud)

你看他们所代表的数字相等.

参考: == <=


TLDR:使用===并手动转换类型以防止这种奇怪的行为......