我只是有一个微不足道的问题。
为什么undefined == undefined
会返回true
,但undefined >= undefined
是false
?
undefined
等于undefined
。
但它不等于或更大?
答案 0 :(得分:46)
>=
operator基本上是对<
operator的否定。并且两者都调用Abstract Relational Comparison Algorithm,它返回{em> undefined for undefined >= undefined
,如步骤3(a到c)中所定义。实际上,您还可以看到大于( - 或等于)和小于( - 或等于)的运算符仅用于处理数字或字符串。
然后在>=
运算符规范的6.步骤中,您可以看到它返回 false 的原因:
如果
r
true 或未定义,请返回 false 。否则,返回 true 。
答案 1 :(得分:8)
undefined >= undefined
和||
,&#34;中的OR大于或等于&#34;与此OR >, <, >=
不同。
就其而言,undefined
等比较运算符适用于数字而undefined
不是数字,10 >= "Hello World"
未定义。
在10 >= "10"
时,您期望作为返回值?当然是假的,但true
再次返回10 == "10"
,因为10 === "10"
为真且>=
为假。 &#34; 10&#34;可以转换为数字,这样我们就可以看到在实际数字的情况下返回的结果,而不是带数字的字符串。
!=
没有严格的相等运算符版本,而!==
是null
当您尝试比较undefined
,NaN
,10
时,会发生一些非常奇怪和令人困惑的事情 - 这是JavaScript的规范可能能够回答的问题,因为JavaScript是一个非常松散的类型语言,并且类型非常灵活,这就是为什么人们可以比较"10"
和{{1}}并仍然得到结果,这些结果只有在比较大多数其他语言中的两个整数时才可能得到。
问题和讨论比直接投票更受欢迎。感谢。
答案 2 :(得分:2)
不等式运算符(<
,>
等)不能用于比较无法隐式转换为数字的值。这包括undefined
。您所看到的原因是,与其他语言不同,如果您尝试执行此类操作(即python中的TypeError
),则抛出错误,JS允许您执行此操作。但是,结果总是错误的。