Site icon Tips Note by TAM

NaNの判定

NaN(Not a Number)は、数値以外であることを表す特別な値です。
等価演算子(==)と同値演算子(===)では、どちらかの値がNaNの場合は常にfalseを返すため、
NaNであるか判定することができません。

そこで判定に使用されるisNaN()関数ですが、
厳密には、NaNかどうかではなく、数値に変換できるかどうかの判定をしているようです。

NaNであるかのきちんとした判定には、ECMAScript6で追加されたNumber.isNaN()を使用するのがいいようです。

 

isNaN

引数が数に変換できない場合はtrue、数に変換できる場合はfalseを返すので、
NaNへと変換されるものに対してもtrueを返します。

isNaN(1);  // false
isNaN(NaN);  // true 
isNaN("NaN");  // true

 

isNaN(null);  // false
isNaN(undefined);  // true

nullは数値に変換すると0になるのでfalse、
undefinedは数値に変換するとNaNになるのでtrueを返します。

 

isNaN(true);  // false
isNaN(false);  // false

論理値のtrue、falseは数値に変換すると1と0に変換されるので、falseを返します。

 

Number.isNaN

引数がNaN のときだけ true を返します。
現在はまだChrome、Firefoxでしかサポートされていません。

Number.isNaN(NaN); // true
Number.isNaN("NaN"); // false

 

ポリフィル

Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && value !== value;
}

 

 

■参考サイト
NaNの判定について
Number.isNaN() | JavaScript 日本語リファレンス | js STUDIO
Number.isNaN() - JavaScript | MDN
NaN をなんとかしたい上での諸注意 と global.isFinite() の罠