javascript – null和undefined不一致的比较

前端之家收集整理的这篇文章主要介绍了javascript – null和undefined不一致的比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很想知道为什么
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.

猜你在找的JavaScript相关文章