我很想知道为什么
null == undefined
返回 true
但是
null >= undefined
返回 false
是否包含大于运算符以不同方式强制值?
最佳答案
tl;dr 在这种情况下,>=
最终将两个参数都强制转换为数字:undefined
被强制转换为 NaN
而 null
被强制为 0
,这不相等。对于 ==
,规范明确定义 null == undefined
为 true
。
事实上,在这两种情况下,值都会被强制转换(至少在某种意义上 - ==
的情况很特殊)。让我们在规范的帮助下一次考虑它们。
algorithm >=
运算符使用 "Abstract Relational Comparison Algorithm" ,由其他关系运算符共享。从规范中的描述中,我们看到该算法执行以下操作:
- 将参数转换为原语(
null
和undefined
已经是)。 - 检查参数是否为
String
(它们不是)。 - 如果它们不是
String
,则算法将参数转换为数字(参见步骤 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 - null 和 undefined 不一致比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34055818/