JavaScriptで値が数値かどうかチェックする:isNaN()

JavaScript である値が数値かどうかを判定する場合は、isNaN() 関数を使用します。ここでは、isNaN() 関数の使い方と、使う上での注意点について説明します。

isNaN() 関数の使い方

isNaN() 関数は、JavaScript に組み込まれている関数です。isNaN() は、引数が数値でない場合に true を返し、数値の場合は false を返します。これによって、特定の値が数値か否かを判定することができます。なお、NaN とは Not a Number(非数)を表します。

以下に使用例を示します。

isNaN('abc');        // true (数値ではない)
isNaN(123);          // false(数値)
isNaN(012);          // false(8進リテラル)
isNaN(0x12);         // false(16進リテラル)
isNaN('123');        // false(判定前に数値に変換される)
isNaN('012');        // false(同上)
isNaN('0x12');       // false(同上)
isNaN(true);         // false(同上、trueは1に変換される)
isNaN(false);        // false(同上、falseは0に変換される)
isNaN('true');       // true(数値ではない)
isNaN(undefined);    // true(数値ではない)
isNaN(null);         // false    

上の例では、指定した引数が数値である場合だけでなく、文字列だった場合でも isNaN() は false を返し数値として判定されています。この理由に関しては以下で説明します。

isNaN() 関数を使う際の注意点

isNaN() 関数は、関数実行時に引数に対して Number() 関数と等価の型変換を行います。そのため、引数が '123' のような文字列だった場合でも、数値の 123 に変換した後に判定を行うため、falseが返されます。同様に、true や false のブーリアン値もそれぞれ 1 と 0 に変換された後に判定されるため、false が返されます。

サンプルプログラム

次のサンプルは、テキストボックスに入力された値が数値か否かを判定し、アラートを表示するプログラムです。

HTML

数値を入力して下さい:
<input type="text" id="input01">
<input type="button" value="check" onclick="check();">

JavaScript

var check = function() {
  var num = document.getElementById('input01').value;
  if(!isNaN(num)){
    alert("入力された数は" + num + "です。");
  } else {
    alert("数値以外が入力されています");
  }
}

isNaN() 関数は数値ではない場合に true を返すので、注意して使用してください。


イベント