1

なぜこれら2つが違うのですか?

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

3 に答える 3

1

等式および不等式の述語はシグナリングではないため、falseを返すx = xを使用して、xが静かなNaNであるかどうかをテストできます。

ソース

これはIEEE754で定義されているルールであるため、仕様に完全に準拠するにはこの動作が必要です。

于 2013-02-20T17:45:03.490 に答える
1

に等しいものはありませんNaN。比較は常にになりますfalse

厳密な比較アルゴリズムと抽象的な比較アルゴリズムの両方で、型が同じで、どちらかのオペランドがNaNである場合、結果はになりますfalse

Type(x)がNumberの場合、

  • の場合xNaN、を返しfalseます。
  • の場合yNaN、を返しfalseます。

抽象アルゴリズムでは、タイプが異なり、aNaNがオペランドの1つである場合、もう1つのオペランドは最終的に数値に強制変換され、上記のシナリオに戻ります。

于 2013-02-20T17:47:42.943 に答える
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数値演算の結果であるため、数値であることがわかります。

ウィキから:

于 2013-02-20T17:45:43.973 に答える