2017-10-06 784 views
44

我只是有一个微不足道的问题。undefined == undefined是真的。但是undefined> = undefined是假的?

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

undefined等于undefined

但它不等于或大于?

+11

我的猜测是,两个'undefined's被强制为'NaN',这不等于它自己。 – Xufox

+1

'undefined === undefined || undefined>和undefined> = undefined,OR中的“大于或等于”与此不同或“||” –

+0

@DeepakKamat在'> ='背后发生了什么?我想这就是这个问题在 – theonlygusti

回答

2

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

+0

这并不能解释为什么''foo“> =”bar“'是'true',并且没有解释操作符如何强制它们的操作数为匹配类型。 – Xufox

+1

@Xufox,因为JavaScript是一个该死的宽松类型的语言。它可以转换字符串中包含数字的字符串并进行比较,也就是说它也有一个“===”运算符来进行严格比较,而不是简单地将字符串转换为整数和浮点数。 –

+8

实际上,在使用不等式时,字符串会按照[按照字典顺序](https://stackoverflow.com/a/7087831/7662085)进行比较。 – stybl

46

>= operator实质上是< operator的否定。并且都调用Abstract Relational Comparison Algorithm,其返回未定义的对于步骤3(a到c)中定义的undefined >= undefined。实际上,您也可以看到大于( - 或 - 等于)和小于( - 或 - 等于)的运算符只能用于数字或字符串

然后在6步骤>=运营商的规范的,你可以看到为什么它返回

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

8

undefined === undefined || undefined > undefinedundefined >= undefined和的或 “大于或等于” 是不一样的,因为这OR ||

就其而言,像>, <, >=等比较运算符等用于数字而undefined不是数字,undefined是未定义的。

10 >= "Hello World"是什么意思作为回报值?当然是假的,但10 >= "10"返回true,因为10 == "10"为真,10 === "10"为假。可以将“10”转换为数字,以便我们看到在实际编号的情况下返回的结果,而不是包含数字的字符串。

没有为>=没有严格平等运营商版本,相!=这是!==

当您尝试比较nullundefinedNaN一些很奇怪和困惑的事情发生了 - 这是值得的JavaScript的规范可能能够回答,因为JavaScript是一种非常松散的类型语言,并且类型非常灵活,所以可以比较10"10",并且仍然可以获得仅在比较其他大多数语言中的两个整数时才能获得的结果。

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