なぜこれら2つが違うのですか?
var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
なぜこれら2つが違うのですか?
var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
等式および不等式の述語はシグナリングではないため、falseを返すx = xを使用して、xが静かなNaNであるかどうかをテストできます。
これはIEEE754で定義されているルールであるため、仕様に完全に準拠するにはこの動作が必要です。
に等しいものはありませんNaN
。比較は常にになりますfalse
。
厳密な比較アルゴリズムと抽象的な比較アルゴリズムの両方で、型が同じで、どちらかのオペランドがNaN
である場合、結果はになりますfalse
。
Type(x)がNumberの場合、
- の場合
x
はNaN
、を返しfalse
ます。- の場合
y
はNaN
、を返しfalse
ます。
抽象アルゴリズムでは、タイプが異なり、aNaN
がオペランドの1つである場合、もう1つのオペランドは最終的に数値に強制変換され、上記のシナリオに戻ります。
次の操作は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
数値演算の結果であるため、数値であることがわかります。
ウィキから: