JavaScript/NaN
NaN(ナン、Not a Number、非数、ひすう)とは、数値でないことを表す特殊な値です。IEEE 754の定義より、NaN
はNaN
自身を含むあらゆる値と等しくありません。また、 Boolean コンテキストに現れたときに偽とみなされます(Falsy)。
IEEE 754 では、NaN は qNaN(quiet NaN)とsNaN(signaling NaN)の2つが定められバイナリ表現も違っています。JavaScript の NaN は全て qNaN です。即ち、メソッドが NaN を返す場合は例外は throw されません(ゼロ除算例外の様な算術例外はありません)。
NaN == NaN // false
NaN === NaN // false
Boolean(NaN) // false
Object.is(NaN, NaN) // これは true
概要
編集JavaScriptではゼロ除算や-1の平方根・対数など、定義されていない演算はNaN
を返します。
alert( 0 / 0 ); // "NaN"
alert( Math.sqrt(-1) ); // "NaN"
alert( Math.log(-1) ); // "NaN"
また、NumberオブジェクトのコンストラクタやparseInt、parseFloatなど、オブジェクトを数値に変換する関数に対して数値に変換できないオブジェクト(たとえば "A"
などの文字列)を渡すとNaN
が返されます。オブジェクトを数値に変換できたかどうかはisNaN関数で調べることができます。
alert( Number("A") ); // "NaN"
alert( parseInt("A") ); // "NaN"
alert( parseFloat("A") ); // "NaN"
NaN
の値はNumber.NaNプロパティで取得することができます。JavaScript 1.3以降ではNumber.NaN
を値に持つグローバル変数NaN
が定義されていますが、グローバル変数NaN
は後方互換のため、JavaScriptのプリミティブ値ではなく書き換え可能な変数として定義されています。NaN
の値を取得する必要がある場合はNumber.NaN
プロパティを使用してください。
alert( NaN ); // "NaN"
alert( Object.is(NaN, Number.NaN) ); // "true"
NaN = 1;
alert( NaN ); // "1"
alert( Number.NaN ); // "NaN"