我用 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,我觉得不应该同时发生。
这就是我的二分查找进入死循环的原因。
在我将所有变量转换为 toString() 之后,这个问题就消失了。
我的问题是:这怎么会发生?
最佳答案
<
和 >
利用Abstract Relational Comparison .
当给定一个数字和一个字符串(第 6 步)时,该字符串将被转换为一个数字。在这种情况下,结果为 NaN
因为 @qq.com
.
'10000@qq.com' < 100080 // initial
Number('10000@qq.com') < 100080 // step 6.a
NaN < 100080
这导致 undefined
结果:
6.e. If nx is NaN, return undefined.
哪个 <
and >
然后替换为 false
.
- If r is undefined, return false. Otherwise, return r.
为什么 NaN
结果 undefined
或 false
至少部分是因为 NaN
被设置为永远不会被认为等于任何东西,包括它自己。这就是为什么 isNaN()
已定义。
NaN === NaN // false
isNaN(NaN) // true
关于javascript - 两个变量同时不等于、不大于、不小于?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388974/