我有一个比较琐碎的问题。
为什么
但是它不等于或大于?
为什么
undefined == undefined
返回 true
,但是 undefined >= undefined
却是 false
?
undefined
等于 undefined
。但是它不等于或大于?
undefined == undefined
返回 true
,但是 undefined >= undefined
却是 false
?
undefined
等于 undefined
。undefined === undefined || undefined > undefined
和undefined >= undefined
,在“大于或等于”的OR运算符中,不同于这个OR ||
。
就比较运算符如>, <, >=
等而言,它们是针对数字的,而undefined
不是数字,undefined
是未定义的。
当10 >= "Hello World"
时,您期望的返回值是什么?当然是false,但是再次执行10 >= "10"
会返回true
,因为10 == "10"
为true,10 === "10"
为false。可以将“10”转换为数字,因此我们可以看到如果实际数字而不是带有数字的字符串,则会返回什么结果。
与!=
相比,>=
没有严格的等式运算符版本,而!=
是!==
当您尝试比较null
、undefined
、NaN
时,会发生一些非常奇怪和令人困惑的事情——JavaScript规范可能能够回答这个问题,由于JavaScript是一种非常松散的类型语言,类型非常灵活,因此可以比较10
和"10"
,并且仍然可以获得您在大多数其他语言中只有比较两个整数时才能获得的结果。
<
,>
等)不能用于比较无法隐式转换为数字的值。这包括undefined
。你看到的原因是,与其他语言不同,如果你尝试做这样的事情(例如在 Python 中引发TypeError
),JS会让你这样做。但结果总是false。"foo">="bar"
是true
,也没有包括运算符如何将其操作数强制转换为匹配类型的说明。 - Sebastian Simon
NaN
,而NaN
不等于自身。 - Sebastian Simon