JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのisNaN()関数とは?使い方と判定結果をわかりやすく解説

JavaScriptのisNaN()関数とは

JavaScriptのisNaN()関数は、引数として渡された値がNaN(Not a Number:数値ではない)であるかどうかを判定するグローバル関数です。値がNaN、あるいは数値に変換した結果NaNになる場合はtrueを返し、有効な数値であればfalseを返します。

この関数は、文字列を数値へ変換する処理や数値演算の結果が不正になったかどうかをチェックしたい場合などに活用できます。

構文

isNaN(value);
  • value: 判定対象となる値(文字列・数値・オブジェクトなど)

また、ES6以降ではNumberオブジェクトからも呼び出すことが可能です。

Number.isNaN(value);

使用例

次のサンプルコードでは、3つの異なる値に対してisNaN()関数を使って判定を行っています。

<html>
<head>
   <title>JavaScript Example</title>
</head>
<body>
   <script type="text/javascript">
      // 文字列をparseFloatで変換 → 数値として解釈できないためNaN
      var result1 = parseFloat("Ef00A.D3");
      document.write(isNaN(result1));
      document.write('<br>');
      
      // 文字列に対するMath.logは計算不可のためNaN
      var result2 = Math.log("welcome");
      document.write(isNaN(result2));
      document.write('<br>');
      
      // 有効な数値に対するMath.logは正常な数値
      var result3 = Math.log(1254);
      document.write(isNaN(result3));
   </script>
</body>
</html>

実行結果

true
true
false

結果の解説

  • 1つ目: parseFloat("Ef00A.D3")は先頭から数値として読み取れないためNaNとなり、trueが返されます。
  • 2つ目: 文字列"welcome"はMath.log()で計算できないためNaNとなり、trueが返されます。
  • 3つ目: Math.log(1254)は有効な数値を返すため、falseが返されます。

補足:isNaN()とNumber.isNaN()の違い

グローバルなisNaN()は、引数をまず数値へ強制的に変換してから判定します。そのためisNaN("hello")のように文字列もtrueになります。一方、Number.isNaN()は変換を行わず、元の値そのものがNaNである場合のみtrueを返すため、より厳密な判定が可能です。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説

    JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン