为什么这两者不同?
var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
答案 0 :(得分:1)
答案 1 :(得分:1)
Nothing 等于NaN
。任何比较都将始终为false
。
在严格和抽象比较算法中,如果类型相同,并且任一操作数为NaN
,则结果为false
。
如果Type(x)是Number,那么
- 如果
x
为NaN
,请返回false
。- 如果
y
为NaN
,请返回false
。
在抽象算法中,如果类型不同,并且NaN
是操作数之一,则另一个操作数最终将被强制转换为数字,并将我们带回上面的场景。 / p>
答案 2 :(得分:0)
以下操作返回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
数字,因为它是由数字运算产生的。
来自wiki: