JavaScript - if文で数値かどうか判定する isNaN() の注意点

JavaScript で「数値かどうか」を判定するには、 if 文と isNaN() 関数を使います。

通常の数値判定は isNaN() 関数で十分なのですが、 特殊な値の場合には問題があります。

ここではisNaN() 関数を使用する際の注意点も合わせて紹介します。

if 文と isNaN() 関数で数値かどうかを判定するサンプルコード

if 文と isNaN() 関数を使って、 数値判定をするサンプルコードは次のようになります。


var num = 123;

if (!isNaN(num)){
	// 数値の場合の処理

} else{
	// 数値でない場合の処理

}

isNaN() 関数の注意点

戻り値を勘違いしやすい

isNaN() 関数は、「is Not a Number」で、否定を表す not が入っています。

ですから、数値でない時に{true」、数値の時に「false」が返ってきます。

戻り値を勘違いしやすいので注意が必要です。

ロジックをわかりやすくするためには、上のサンプルコードのように isNaN() 関数の前に、 論理否定演算子「!」をつけます。

そうすると、先に「数値の場合のロジック」を記述することができ、ロジックがわかりやすくなります。

isNaN() 関数は型変換を行う。

isNaN() 関数は、Number() 関数と同じように型変換を行って、その上で判定します。

ですから、"123" のような数値に変換できる文字列でも「false」が返ってきます。


console.log(isNaN("123"));

// 実行結果
false

null の場合も「false」が返ってくる

次のように、null の場合も 「false」が返ってきます。


console.log(isNaN(null));

// 実行結果
false

null を「数値」として判断されると困る場合は、 別途 null を判定するロジックを追加する必要があります。

null を扱うプログラムの場合は注意してください。