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 を扱うプログラムの場合は注意してください。