我很想知道为什么
null == undefined
返回true
但
null >= undefined
返回false
是否包含大于运算符以不同方式强制值?
我很想知道为什么
null == undefined
返回true
但
null >= undefined
返回false
是否包含大于运算符以不同方式强制值?
tl; dr在这种>=
情况下,最终将两个参数强制转换为数字: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
。
在 JS==
运算符中,将值强制为相同类型进行比较1=="1"
,true
. 使用===
运算符进行精确类型匹配