我很想知道为什么
null == undefined
回来true
但是
null >= undefined
回报 false
包含大于运算符的值是否会以不同方式强制执行?
TL;博士的>=
结束在这种情况下强迫两个参数为数字:undefined
被强制转换成NaN
而null
被强制为0
,这是不相等的.对于==
,该规范明确定义null == undefined
的true
.
事实上,这些值在两种情况下都会被强制执行(从某种意义上说,至少==
是这种情况).让我们在规范的帮助下一次考虑一个.
该算法的>=
操作者使用"抽象关系比较算法",这是由其他关系运营商共享.根据规范中的描述,我们看到该算法执行以下操作:
该参数元(其转化null
和undefined
已经是).
检查参数是否为String
s(它们不是).
如果它们不是String
s,则算法将参数转换为数字(参见步骤3.a.和3.b.)并执行与结果的比较.
最后一点是关键.从ToNumber
表中,我们看到undefined
被胁迫NaN
,并且算法认为任何比较NaN
都是假的(参见步骤3.c.和3.d.).因此,null >= undefined
是false
.
对于另一种情况,==
故事实际上要简单得多:规范明确指出这null == undefined
是"抽象平等比较算法"的一部分(参见步骤2和3).因此,null == undefined
是true
.