Javascript undefined==undefined为true。但未定义>;=未定义是假的吗?

Javascript undefined==undefined为true。但未定义>;=未定义是假的吗?,javascript,undefined,Javascript,Undefined,我只是有一个更琐碎的问题 为什么undefined==undefined返回true,但是undefined>=undefined是false 未定义等于未定义 但它不等于或大于 不等式运算符(等)不能用于比较无法隐式转换为数字的值。这包括未定义的。你所看到的背后的原因是,与其他语言不同的是,如果你试图做类似的事情(例如python中的TypeError),JS允许你这样做。然而,结果总是错误的。基本上是对的否定。这两个函数都调用,它返回undefined forundefined>=undef

我只是有一个更琐碎的问题

为什么
undefined==undefined
返回
true
,但是
undefined>=undefined
false

未定义
等于
未定义

但它不等于或大于

不等式运算符(
等)不能用于比较无法隐式转换为数字的值。这包括
未定义的
。你所看到的背后的原因是,与其他语言不同的是,如果你试图做类似的事情(例如python中的
TypeError
),JS允许你这样做。然而,结果总是错误的。

基本上是对的否定。这两个函数都调用,它返回undefined for
undefined>=undefined
,如步骤3(a到c)中定义的。实际上,您还可以看到大于(-或等于)和小于(-或等于)运算符仅用于数字或字符串

然后在6。在指定
=
运算符的步骤中,您可以看到它返回false的原因:

如果
r
为true或未定义,则返回false。否则,返回true


未定义===未定义| |未定义>未定义
未定义>=未定义
,“大于或等于”中的或与此或
|
不同

就比较运算符而言,
>、=
等表示数字,
未定义的
不是数字,
未定义的
是未定义的

10>=“Hello World”
时,您希望返回什么值?当然是false,但同样地,
10>=“10”
返回
true
,因为
10==“10”
为true,而
10==“10”
为false。“10”可以转换成一个数字,因此我们可以看到在实际数字而不是带有数字的字符串的情况下返回的结果

相反,
=
没有严格的相等运算符版本=这是
==

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


提问和讨论比直接投票更受欢迎。谢谢。

我猜两个
未定义的
都被强制为
NaN
,它不等于自身。
未定义===未定义的| |未定义的
未定义的
,“大于或等于”中的OR与此或
|
是的,我同意Xufox。JavaScript可能会尝试将它们转换为一些可比较的值,例如数字。但未定义的转换成数字的是NaN,它既不等于自身也不大于自身。它是Javascript。不要试图使用逻辑。这并不能解释为什么
“foo”>=“bar”
true
,也不能解释运算符如何将其操作数强制为匹配类型。@Xufox,因为JavaScript是一种该死的松散类型语言。它可以转换字符串中包含数字的字符串并进行比较,也就是说,它还有一个“==”运算符来进行严格比较,而不是简单地将字符串转换为整数和浮点。实际上,当使用不等式时,字符串是比较的。