6

Mozillaのドキュメントによると:

未定義の値は、数値コンテキストで使用されると NaN に変換されます。

では、なぜ次の両方が true に等しいのでしょうか?

NaN != undefined
NaN !== undefined

Nan !== undefined変数の型が違うので理解できました...

4

2 に答える 2

13

NaN は定義上非数」です

これは、それが未定義であることを意味するのではなく、明確に定義されていますが、数値ではないという意味で未定義です。

于 2013-04-19T13:59:09.740 に答える
2

これは、ECMAScript 言語仕様のセクション 4.3.23 に NaNよると、次のように定義されているためです。

IEEE 754 の「Not-a-Number」値である数値

したがって、これは数値であり、未定義または null ではありません。値については、セクション 8.3で詳しく説明します。

...; ECMAScript コードでは、すべての NaN 値は互いに区別できません。

との等価比較は、セクション 11.9.3NaNで定義されています。

x と y が値である比較 x == y は、true または false を生成します。このような比較は次のように実行されます: Type(x) が Number の場合:

x が NaN の場合、false を返します。

y が NaN の場合、false を返します。

比較のために、isNaN()代わりに次を使用する必要があります。

isNaN(NaN)
// true

アップデート

の値は数値で+undefinedはありませんが、それでも数値であり (特別な値がありますが)、したがって未定義ではありません。undefined文字列にキャストすると、定義された文字列値が得られるのと同じように。

于 2013-04-19T13:59:18.727 に答える