NaN(ナン、Not a Number、非数、ひすう)とは、数値でないことを表す特殊な値です。IEEE 754の定義より、NaNNaN自身を含むあらゆる値と等しくありません。また、 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オブジェクトのコンストラクタやparseIntparseFloatなど、オブジェクトを数値に変換する関数に対して数値に変換できないオブジェクト(たとえば "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"

関連項目

編集
このページ「JavaScript/NaN」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。