您真正的问题似乎是:
为什么:
null >= 0; // true
但:
null == 0; // false
真正发生的是 大于等于运算符(
>=)执行类型强制(
ToPrimitive),提示类型为
Number,实际上所有关系运算符都具有这种行为。
null等于运算符 (
==)以特殊方式处理。在简短的,它只 强制转换 到
undefined:
null == null; // truenull == undefined; // true
值,例如
false,
'',
'0',和
[]被受数字类型强制,它们都强迫到零。
您可以在“抽象相等比较算法”和“抽象关系比较算法”中查看此过程的内部细节。
综上所述:
关系比较:如果两个值都不是String类型,
ToNumber
则在两个值上都调用。这与+
在前面添加a相同,后者将null强制转换为0
。平等比较:仅调用
ToNumber
字符串,数字和布尔值。



