undefined == undefined是真的。 但是undefined> = undefined是false?

我只是有一个微不足道的问题。

为什么undefined == undefined返回true ,但是undefined >= undefinedfalse

undefined等于undefined

但这不等于或大于?

>=运算符实质上是<运算符的否定。 并且都调用抽象关系比较algorithm(Abstract Relational Comparison Algorithm) ,该algorithm返回未定义undefined >= undefined如步骤3(a到c)中定义的那样。 实际上,你也可以看到, 大于( – 或 – 等于)和小于( – 或 – 等于)的操作符只能用于数字或string

然后在>=运算符的规范的第6步,你可以看到它为什么返回false

如果rtrueundefined ,则返回false 。 否则,返回true

undefined === undefined || undefined > undefined undefined === undefined || undefined > undefinedundefined >= undefined ,“大于或等于”的OR与这个OR ||不相同。 。

就它而言,像>, <, >=等比较运算符是用于数字, undefined不是数字, undefined是未定义的。

10 >= "Hello World"时,你会期望什么作为返回值? 当然是假的,但是10 >= "10"返回true因为10 == "10"为真, 10 === "10"为假。 “10”可以被转换成一个数字,所以我们可以看到实际数字返回的结果,而不是数字的string。

没有严格的相等运算符版本>=而不是!=这是!==

当你尝试比较nullundefinedNaN时,会发生一些非常奇怪和令人困惑的事情 – 这是JavaScript规范可能能够回答的问题,因为JavaScript是非常松散的types语言,而且types非常灵活,比较10"10"并且只有在比较其他大多数语言中的两个整数时才会得到结果。

问题和讨论比直接投票更受欢迎。 谢谢。

不等式运算符( <>等)不能用于比较不能隐式转换为数字的值。 这包括undefined 。 你所看到的背后的原因是,不像其他语言抛出一个错误,如果你试图做这样的事情(即在python TypeError ),JS让你这样做。 但是,结果总是错误的。