javascript - 两个变量同时不等于、不大于、不小于?

标签 javascript

我用 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 .

  1. If r is undefined, return false. Otherwise, return r.

为什么 NaN结果 undefinedfalse至少部分是因为 NaN被设置为永远不会被认为等于任何东西,包括它自己。这就是为什么 isNaN()已定义。

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

关于javascript - 两个变量同时不等于、不大于、不小于?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388974/

相关文章:

javascript - 检查输入字段是否填写正确(纯javascript)

javascript - 在 JS 中将纸张切割成最小数量的正方形

javascript - Firebase - 检查数据是否有子项

javascript - React - 渲染 CSS 动画 onClick

javascript - 通过 REST 从 Parse.com 检索 Fullcalendar 事件

javascript - 如何在HTML中调用外部js文件变量

javascript - 如何修复免费 jqgrid 中未定义的从一个 jqgrid 列拖动到另一列时无法读取属性 'cellIndex'

javascript - Node.js/npm - 无论如何判断一个包是否是纯 JS?

javascript - 解决/拒绝 promise ,有什么区别?

javascript - 在客户端运行 runat=server