gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:55:14 30 4
gpt4 key购买 nike

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com