本问题出现的原因在于这段代和这段描述。

1
2
3
alert( null > 0 );  // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true

是的,上面的结果完全打破了你对数学的认识。在最后一行代码显示“null 大于等于 0”的情况下,前两行代码中一定会有一个是正确的,然而事实表明它们的结果都是 false。 为什么会出现这种反常结果,这是因为相等性检测 == 和普通比较符 > < >= <= 的代码逻辑是相互独立的。进行值的比较会把 null 转为数字,因此它被转为了 0。这就是为什么(3)中 null >= 0 返回 true,(1)中 null > 0 返回 false。 另一方面,undefined 和 null 在相等性检测 == 中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外不会等于任何其他的值。这就解释了为什么(2)中 null == 0 会返回 false。 《现代 Javascript 教程》

同样的问题,我在《你所不知的的 JavaScript(中卷)》P91 看到过,但是记得它的解释是,>= 这类操作会被转化为 ! + <;对,就是对 < 结果的取反。那么问题来了,这个迷惑行为到底应该如何解释?

嗯,原来是我傻不拉几的记错了;这是 2 个问题,一个是关系运算符的转化和默认返回;一个是相等运算的判断规则