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"