Javascript 为什么IsNaN(x)不同于x==NaN,其中x=NaN

Javascript 为什么IsNaN(x)不同于x==NaN,其中x=NaN,javascript,nan,Javascript,Nan,为什么这两个不同 var x = NaN; //e.g. Number("e"); alert(isNaN(x)); //true (good) alert(x == NaN); //false (bad) 相等和不相等谓词是非信令的,因此可以使用返回false的x=x来测试x是否是安静的NaN 这是IEEE 754中定义的规则,因此完全遵守规范要求此行为。以下操作返回NaN The divisions 0/0, ∞/∞, ∞/−∞, −∞/∞, and −∞/−∞ The multipli

为什么这两个不同

var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
相等和不相等谓词是非信令的,因此可以使用返回false的x=x来测试x是否是安静的NaN


这是IEEE 754中定义的规则,因此完全遵守规范要求此行为。

以下操作返回NaN

The divisions 0/0, ∞/∞, ∞/−∞, −∞/∞, and −∞/−∞
The multiplications 0×∞ and 0×−∞
The power 1^∞
The additions ∞ + (−∞), (−∞) + ∞ and equivalent subtractions.
Real operations with complex results:

The square root of a negative number
The logarithm of a negative number
The tangent of an odd multiple of 90 degrees (or π/2 radians)
The inverse sine or cosine of a number which is less than −1 or greater than +1.

以下操作返回数值操作的值。因此,
typeof
Nan是一个数字。NaN在数学上是一个未定义的数字。∞ + (-∞) 不等于∞ + (-∞). 但是我们得到NaN是
typeof
number,因为它是数值运算的结果

From:

任何东西都不等于
NaN
。任何比较都将始终为
false

在严格比较算法和抽象比较算法中,如果类型相同,且任一操作数为
NaN
,则结果将为
false

如果类型(x)为数字,则

  • 如果
    x
    NaN
    ,则返回
    false
  • 如果
    y
    NaN
    ,则返回
    false

在抽象算法中,如果类型不同,并且一个
NaN
是其中一个操作数,那么另一个操作数最终将被强制为一个数字,并将使我们回到上面的场景。

考虑
NaN===NaN//false
。鸭子不是兔子
鸭子!==Bunnies
,但两者都不是一个数字,因此两者都是rE<代码>楠< /代码>,因此<代码>楠< /代码>不能等于自身,因此<代码> ==和<代码>==< /代码>必须返回<代码> false < /代码>。考虑一下为什么它们将有<代码> iSnA< /Case>函数。等式运算符(==和===)不能用来测试NaN的值。请改用isNaN。评论不错,但isNaN的存在并不意味着==不起作用。帮助函数是一个常见的地方。为什么会有否决票,伙计们?至少告诉我,这样我才能改进。|我没有否决票,但我很清楚,你没有回答为什么的问题。@chaospanion,不是吗显而易见?以下操作返回数值操作的值,因此typeof Nan是一个数字。Nan在数学术语中是一个未定义的数字。∞ + (-∞) 不等于∞ + (-∞). 但是我们知道楠是数字的类型,因为它是由一个数字运算产生的。这就是我写的。它确实不明显。你必须从新手的角度考虑它。“我猜是这样的。总之,我更新了我的答案。真的吗?无穷大看起来和南一样。那么无穷大=无穷大。它怎么会是真的?”stkim:“无穷大看起来和NaN一样…”我不知道你说的是什么意思。它们不一样。无穷大的类型是数字,和NaN的类型一样。正如你所说,另一个操作数最终将被强制为数字。我认为是“NaN”没有值。比较值的so==,没有意义。比较值和类型的so is==。@bighostkim:如果类型不同,非数字操作数将强制为数字。由于
Infinity
NaN
的类型相同,它将成为一个简单的值比较,除非其中一个操作数是
NaN
(如本例所示),结果将始终为
false