undefined == undefined是真的。 但是undefined> = undefined是false?
我只是有一个微不足道的问题。
为什么undefined == undefined
返回true
,但是undefined >= undefined
是false
?
undefined
等于undefined
。
但这不等于或大于?
>=
运算符实质上是<
运算符的否定。 并且都调用抽象关系比较algorithm(Abstract Relational Comparison Algorithm) ,该algorithm返回未定义的undefined >= undefined
如步骤3(a到c)中定义的那样。 实际上,你也可以看到, 大于( – 或 – 等于)和小于( – 或 – 等于)的操作符只能用于数字或string 。
然后在>=
运算符的规范的第6步,你可以看到它为什么返回false :
如果
r
为true或undefined ,则返回false 。 否则,返回true 。
undefined === undefined || undefined > undefined
undefined === undefined || undefined > undefined
和undefined >= undefined
,“大于或等于”的OR与这个OR ||
不相同。 。
就它而言,像>, <, >=
等比较运算符是用于数字, undefined
不是数字, undefined
是未定义的。
当10 >= "Hello World"
时,你会期望什么作为返回值? 当然是假的,但是10 >= "10"
返回true
因为10 == "10"
为真, 10 === "10"
为假。 “10”可以被转换成一个数字,所以我们可以看到实际数字返回的结果,而不是数字的string。
没有严格的相等运算符版本>=
而不是!=
这是!==
当你尝试比较null
, undefined
, NaN
时,会发生一些非常奇怪和令人困惑的事情 – 这是JavaScript规范可能能够回答的问题,因为JavaScript是非常松散的types语言,而且types非常灵活,比较10
和"10"
并且只有在比较其他大多数语言中的两个整数时才会得到结果。
问题和讨论比直接投票更受欢迎。 谢谢。
不等式运算符( <
, >
等)不能用于比较不能隐式转换为数字的值。 这包括undefined
。 你所看到的背后的原因是,不像其他语言抛出一个错误,如果你试图做这样的事情(即在python TypeError
),JS让你这样做。 但是,结果总是错误的。