为什么undefined == undefined为true但未定义< = undefined?

时间:2018-01-07 20:28:24

标签: javascript operators coercion

在JavaScript中,这是真的:

undefined == undefined

但这是错误的:

undefined <= undefined

起初我认为<=运算符包含了第一个运算符,但我猜它会尝试将其转换为数字并且失败,但我没有找到任何文档来支持它。< / p>

2 个答案:

答案 0 :(得分:6)

<=运算符coerces both operands into actual Numbers在执行比较之前,如果两个操作数都是基元 - 而== does not 1 {{执行此转换实际发生的位置。操作Abstract relational comparisonundefined上执行,产生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值,这就是你错误结果的原因。