未定义==未定义是正确的。但 undefined >= undefined 是假的?

问题描述 投票:0回答:4

我只是有一个比较琐碎的问题。

为什么

undefined == undefined
返回
true
,但
undefined >= undefined
false

undefined
等于
undefined

但它不等于或大于?

javascript undefined
4个回答
46
投票

>=
运算符本质上是
<
运算符
的否定。两者都调用抽象关系比较算法,该算法为步骤 3(a 到 c)中定义的 undefined >= undefined 返回
undefined
。实际上,您还可以看到大于(或等于)和小于(或等于)运算符仅适用于数字或字符串

然后在

>=
运算符规范的第6步中,您可以看到为什么它返回false

如果

r
trueundefined,则返回 false。否则,返回 true


8
投票

undefined === undefined || undefined > undefined
undefined >= undefined
,“大于或等于”中的OR与这个OR
||
不一样。

就其而言,

>, <, >=
等比较运算符适用于数字,而
undefined
不是数字,
undefined
未定义。

10 >= "Hello World"
时,您期望的返回值是什么?当然是假的,但
10 >= "10"
再次返回
true
,因为
10 == "10"
是真而
10 === "10"
是假。 “10”可以转换为数字,因此我们可以看到在实际数字而不是带有数字的字符串的情况下返回的结果。

>=
没有严格相等运算符版本,与
!=
相反,
!==

当你尝试比较

null
undefined
NaN
时,会发生一些非常奇怪和令人困惑的事情 - 这是 JavaScript 规范可能能够回答的问题,因为 JavaScript 是一种非常松散类型的语言,并且类型是非常灵活,这就是为什么人们可以比较
10
"10"
并且仍然得到只有在大多数其他语言中比较两个整数时才能得到的结果。


2
投票

不等运算符(

<
>
等)不能用于比较无法隐式转换为数字的值。这包括
undefined
。你所看到的背后的原因是,与其他语言不同,如果你尝试做这样的事情(即Python中的
TypeError
),其他语言会抛出错误,JS允许你这样做。然而,结果总是错误的。


-3
投票

我想推荐流量套利免费课程为数不多的免费服务之一

© www.soinside.com 2019 - 2024. All rights reserved.