在JavaScript中,这是真的:
undefined == undefined
但这是错误的:
undefined <= undefined
起初我认为<=
运算符包含了第一个运算符,但我猜它会尝试将其转换为数字并且失败,但我没有找到任何文档来支持它。< / p>
答案 0 :(得分:6)
<=
运算符coerces both operands into actual Numbers在执行比较之前,如果两个操作数都是基元 - 而==
does not。 1 {{执行此转换实际发生的位置。操作Abstract relational comparison在undefined
上执行,产生NaN
(参见链接表)。如果您从抽象关系比较中查看步骤4c和4d,如果<=
的任一操作数被强制转换为NaN
,则从抽象关系比较返回undefined
。回到第一个链接,您将在步骤7中看到:
如果 r true 或 undefined ,请返回 false 。否则,请返回 true 。
由于抽象关系比较返回undefined
,<=
的计算结果为false。
不太正式,你可以看到你的比较:
const first = Number(undefined); //or +undefined
const two = Number(undefined); //this is NaN
NaN <= NaN
自ToNumber以来,NaN <= NaN
为假。
1 undefined == undefined
基于抽象NaN == NaN
is never true, nor is NaN < NaN
操作返回true,如果两个操作数是相同的值而不是数字,则与相等运算符一起使用。
答案 1 :(得分:-1)
了解JavaScript中的强制。关于您的问题,当您应用等于运算符时,您的undefined被强制转换为布尔值。所以你得到了真实的结果。当你应用“&lt; =”运算符时,你的undefined被强制转换为一个数字而你得到一个NaN值,这就是你错误结果的原因。