[英]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不等于b , a不大于b , a不小于b ,我认为这不应同时发生。
这就是为什么我的二进制搜索进入死亡循环的原因。
在将所有变量都转换为String()之后 ,此问题消失了。
我的问题是:这怎么可能?
<
和>
利用抽象关系比较 。
当给定一个数字和一个字符串(步骤6)时,该字符串将转换为数字。 在这种情况下,由于@qq.com
导致NaN
。
'10000@qq.com' < 100080 // initial
Number('10000@qq.com') < 100080 // step 6.a
NaN < 100080
结果是undefined
:
6.e. 如果nx是NaN ,则返回undefined 。
然后用<
和>
替换为false
。
- 如果r 未定义 ,则返回false 。 否则,返回r 。
为什么NaN
导致undefined
或false
原因至少部分是因为NaN
被设置为永远不被视为等于任何事物,包括自身。 这就是为什么要定义isNaN()
的原因。
NaN === NaN // false
isNaN(NaN) // true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.