为什么IsNaN(x)的从X == NaN的不同,其中x = NaN的[复制](Why is IsN

2019-07-20 05:45发布

这个问题已经在这里有一个答案:

  • 什么是对IEEE754 NaN值返回false,所有比较的理由? 13个回答

为什么这两个不同?

var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)

Answer 1:

没有什么是等于NaN 。 任何比较将永远是false

在这两种严格和抽象比较算法,如果类型是相同的,并且其中一个操作数是NaN ,其结果将是false

如果Type(x)是号码,然后

  • 如果xNaN ,返回false
  • 如果yNaN ,返回false

在抽象的算法,如果类型是不同的,并且NaN是一个操作数,那么另一个操作数最终会被强制转换成一个数字,将我们带回上述情形。



Answer 2:

的等式和不等式谓词非信令所以X = X返回false可以用来测试是否x是一个静态NaN。

资源

这是IEEE 754定义的规则,以便完全符合规范要求这种行为。



Answer 3:

下面的操作都将返回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楠是一个数字。 陈楠在数学上未定义的数量。 ∞+(-∞)不等于∞+(-∞)。 但是,我们得到了陈楠typeof数字,因为它从一个数值运算结果。

从维基 :



文章来源: Why is IsNaN(x) different from x == NaN where x = NaN [duplicate]