Mozillaのドキュメントによると:
未定義の値は、数値コンテキストで使用されると NaN に変換されます。
では、なぜ次の両方が true に等しいのでしょうか?
NaN != undefined
NaN !== undefined
Nan !== undefined
変数の型が違うので理解できました...
Mozillaのドキュメントによると:
未定義の値は、数値コンテキストで使用されると NaN に変換されます。
では、なぜ次の両方が true に等しいのでしょうか?
NaN != undefined
NaN !== undefined
Nan !== undefined
変数の型が違うので理解できました...
NaN は定義上「非数」です
これは、それが未定義であることを意味するのではなく、明確に定義されていますが、数値ではないという意味で未定義です。
これは、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
文字列にキャストすると、定義された文字列値が得られるのと同じように。