我很想知道为什么
null == undefined
返回true但是
null >= undefined
返回false
包含大于运算符的值是否会以不同方式强制执行?
解决方法
tl; dr> =在这种情况下最终将两个参数强制转换为数字:undefined被强制转换为NaN,而null被强制转换为0,这是不相等的.对于==,规范明确定义null == undefined为true.
事实上,这些值在两种情况下都会被强制执行(从某种意义上说,至少 – = =的情况是特殊的).让我们在规范的帮助下一次考虑一个.
> =运算符的algorithm使用“Abstract Relational Comparison Algorithm”,其由其他关系运算符共享.从规范中的描述,我们看到该算法执行以下操作:
>将参数转换为基元(已经为null和undefined).
>检查参数是否为字符串(它们不是).
>如果它们不是字符串,则算法将参数转换为数字(请参阅步骤3.a.和3.b.)并执行与结果的比较.
最后一点是关键.从ToNumber
table开始,我们看到undefined被强制转换为NaN,算法认为任何与NaN的比较都是假的(参见步骤3.c.和3.d.).因此,null> = undefined是false.
对于另一种情况,==,故事实际上要简单得多:spec explicitly states null == undefined为真,作为“抽象等式比较算法”的一部分(参见步骤2.和3).因此,null == undefined为true.