7

我很想知道为什么

null == undefined

返回true

null >= undefined

返回false

是否包含大于运算符以不同方式强制值?

4

2 回答 2

6

tl; dr在这种>=情况下,最终将两个参数强制转换为数字:undefined被强制转换为,NaNnull被强制转换为0,它们不相等。对于==,规范明确定义null == undefinedtrue


事实上,这些值在这两种情况下都会被强制转换(至少在某种意义上 - 的情况==是特殊的)。让我们在规范的帮助下一次一个地考虑它们。

运算符的算法>=使用“抽象关系比较算法”,其他关系运算符共享该算法。从规范中的描述中,我们看到该算法执行以下操作:

  1. 将参数转换为原语(null并且undefined已经是)。
  2. 检查参数是否为Strings(它们不是)。
  3. 如果它们不是Strings,则算法将参数转换为数字(参见步骤 3.a. 和 3.b.)并与结果进行比较。

最后一点是关键。从ToNumber表 中,我们看到它undefined被强制转换为NaN,并且算法认为任何与 的比较NaN都是虚假的(参见步骤 3.c. 和 3.d.)。因此,null >= undefinedfalse


对于另一种情况,==故事实际上要简单得多:规范明确指出null == undefined是“抽象平等比较算法”的一部分(参见步骤 2. 和 3.)。因此,null == undefinedtrue

于 2015-12-03T00:59:55.197 回答
0

在 JS==运算符中,将值强制为相同类型进行比较1=="1"true. 使用===运算符进行精确类型匹配

于 2015-12-03T00:44:18.227 回答