undefined == undefined为true。但是undefined >= undefined为false?

44
我有一个比较琐碎的问题。
为什么 undefined == undefined 返回 true,但是 undefined >= undefined 却是 falseundefined 等于 undefined
但是它不等于或大于?

11
我猜测两个未定义的值都被强制转换为 NaN,而 NaN 不等于自身。 - Sebastian Simon
2
是的,我同意Xufox的观点。JavaScript可能会尝试将它们转换为可比较的值,例如数字。但是undefined转换为数字是NaN,它既不等于自身也不大于自身。 - theonlygusti
1
@trungk18 基本上,它首先尝试获取字符串或数字(如果它们是对象),然后将它们转换为数字,如果两者都不是字符串。 - MinusFour
8
这是一张计算机程序的输出结果,表示在一个大小为10x10的网格中,水滴从坐标(5, 5)处落下并逐渐扩散的过程。数字代表水滴到达该位置时的时间,"X"表示该位置没有被访问到。 - Mike G
38
这是JavaScript。不要试图使用逻辑。 - gardenhead
显示剩余6条评论
3个回答

46
>= 运算符 本质上是 < 运算符 的否定。两者都调用 抽象关系比较算法,对于 undefined >= undefined ,在第三步中被定义为返回 undefined。实际上,你可以看到 大于等于和小于等于运算符只适用于数字或字符串
然后,在 >= 运算符规范的第6步中,你可以看到它为什么返回 false

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


8

undefined === undefined || undefined > undefinedundefined >= undefined,在“大于或等于”的OR运算符中,不同于这个OR ||

就比较运算符如>, <, >=等而言,它们是针对数字的,而undefined不是数字,undefined是未定义的。

10 >= "Hello World"时,您期望的返回值是什么?当然是false,但是再次执行10 >= "10"会返回true,因为10 == "10"为true,10 === "10"为false。可以将“10”转换为数字,因此我们可以看到如果实际数字而不是带有数字的字符串,则会返回什么结果。

!=相比,>=没有严格的等式运算符版本,而!=!==

当您尝试比较nullundefinedNaN时,会发生一些非常奇怪和令人困惑的事情——JavaScript规范可能能够回答这个问题,由于JavaScript是一种非常松散的类型语言,类型非常灵活,因此可以比较10"10",并且仍然可以获得您在大多数其他语言中只有比较两个整数时才能获得的结果。


2
不等运算符(<>等)不能用于比较无法隐式转换为数字的值。这包括undefined。你看到的原因是,与其他语言不同,如果你尝试做这样的事情(例如在 Python 中引发TypeError),JS会让你这样做。但结果总是false。

这并没有解释为什么"foo">="bar"true,也没有包括运算符如何将其操作数强制转换为匹配类型的说明。 - Sebastian Simon
1
@Xufox 因为 JavaScript 是一种非常松散类型的语言。它可以将带有数字的字符串进行转换和比较,同时还具有 "===" 运算符来进行严格比较,而不是简单地将字符串转换为整数和浮点数。 - Deepak Kamat
8
实际上,在使用不等式时,字符串是按字典顺序(lexicographically)进行比较的。 - stelioslogothetis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接