繁体   English   中英

两个变量不能同时等于,大于,等于和小于?

[英]Two variables are not equal to, and not greater than, and not less than at the same time?

我用javascript对数组进行了二进制搜索,发现比较两个变量的行为很奇怪:

$ node
> a='10000@qq.com'
'10000@qq.com'
> b=100080
100080

> a==b
false
> a>b
false
> a<b
false

> typeof a
'string'
> typeof b
'number'

在这种情况下: a不等于ba不大于ba不小于b ,我认为这不应同时发生。

这就是为什么我的二进制搜索进入死亡循环的原因。

在将所有变量都转换为String()之后 ,此问题消失了。

我的问题是:这怎么可能?

<>利用抽象关系比较

当给定一个数字和一个字符串(步骤6)时,该字符串将转换为数字。 在这种情况下,由于@qq.com导致NaN

'10000@qq.com' < 100080         // initial
Number('10000@qq.com') < 100080 // step 6.a
NaN < 100080

结果是undefined

6.e. 如果nxNaN ,则返回undefined

然后用<>替换为false

  1. 如果r 未定义 ,则返回false 否则,返回r

为什么NaN导致undefinedfalse原因至少部分是因为NaN被设置为永远不被视为等于任何事物,包括自身。 这就是为什么要定义isNaN()的原因。

NaN === NaN // false
isNaN(NaN)  // true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM