为什么这两个不同?
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) 是 Number,那么
- 如果
x
是NaN
,则返回false
。- 如果
y
是NaN
,则返回false
。
在抽象算法中,如果类型不同,并且aNaN
是其中一个操作数,那么另一个操作数最终会被强制转换为一个数字,将我们带回到上面的场景。
以下操作返回 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 是typeof
数字,因为它是数字运算的结果。
来自维基: