4 回答
TA贡献1816条经验 获得超4个赞
你真正的问题似乎是:
为什么:
null >= 0; // true
但:
null == 0; // false
真正发生的是,大于或等于的Operator (>=
)执行类型强制(ToPrimitive
),具有提示类型Number
,实际上所有关系运算符都具有此行为。
null
由Equals Operator(==
)以特殊方式处理。在简短的,它只强制转换到undefined
:
null == null; // truenull == undefined; // true
值,例如false
,''
,'0'
,和[]
受数字类型强制,它们都强迫到零。
您可以在抽象等式比较算法和抽象关系比较算法中看到此过程的内部细节。
综上所述:
关系比较:如果两个值都不是类型String,
ToNumber
则同时调用它们。这与+
在前面添加a相同,对于null强制执行0
。平等比较:只调用
ToNumber
字符串,数字和布尔值。
TA贡献1936条经验 获得超6个赞
我想扩展这个问题,以进一步提高问题的可见性:
null >= 0; //true
null <= 0; //true
null == 0; //false
null > 0; //false
null < 0; //false
这没有任何意义。像人类语言一样,这些东西需要用心学习。
TA贡献1784条经验 获得超9个赞
我有同样的问题 !!。目前我唯一的解决方案是分开。
var a = null;
var b = undefined;
if (a===0||a>0){ } //return false !work!
if (b===0||b>0){ } //return false !work!
//but
if (a>=0){ } //return true !
添加回答
举报