这个问题已经在这里有一个答案:
- 什么是对IEEE754 NaN值返回false,所有比较的理由? 13个回答
为什么这两个不同?
var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
这个问题已经在这里有一个答案:
为什么这两个不同?
var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
没有什么是等于NaN
。 任何比较将永远是false
。
在这两种严格和抽象比较算法,如果类型是相同的,并且其中一个操作数是NaN
,其结果将是false
。
如果Type(x)是号码,然后
- 如果
x
是NaN
,返回false
。- 如果
y
是NaN
,返回false
。
在抽象的算法,如果类型是不同的,并且NaN
是一个操作数,那么另一个操作数最终会被强制转换成一个数字,将我们带回上述情形。
的等式和不等式谓词非信令所以X = X返回false可以用来测试是否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
楠是一个数字。 陈楠在数学上未定义的数量。 ∞+(-∞)不等于∞+(-∞)。 但是,我们得到了陈楠typeof
数字,因为它从一个数值运算结果。
从维基 :