Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. JavaScript
  3. JavaScript リファレンス
  4. 標準組み込みオブジェクト
  5. isNaN()

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。

View in EnglishAlways switch to English

isNaN()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015年7月⁩.

isNaN() 関数は、必要に応じてまず値を数値に変換してから、引数がNaN (非数) かどうかを判定します。isNaN() 関数内の型変換は予想外の結果になることがあるため、Number.isNaN() を使用することをお勧めします。

試してみましょう

function milliseconds(x) {  if (isNaN(x)) {    return "Not a Number!";  }  return x * 1000;}console.log(milliseconds("100F"));// 予想される結果: "Not a Number!"console.log(milliseconds("0.0314E+2"));// 予想される結果: 3140

構文

js
isNaN(value)

引数

value

テストされる値。

返値

指定された値を数値に変換した後でNaN であれば、true を返します。それ以外の場合は、false を返します。

解説

isNaN() は、グローバルオブジェクトの関数プロパティです。

数値の場合、isNaN() は、その数値がNaN であるかどうかを検査します。isNaN() 関数の引数が数値型でない場合、その値はまず数値に変換され、その結果がNaN と比較されます。

数値以外の引数に対するisNaN() のこの動作は、紛らわしいかもしれません。例えば、空文字列は 0 に強制変換されますが、論理値は 0 または 1 に強制変換されます。どちらの値も直感的には「数値ではない」ですが、NaN と評価されないため、isNaN()false を返します。したがって、isNaN() は、「入力は浮動小数点NaN 値であるか」という質問にも、「入力は数値ではないか」という質問にも答えません。

Number.isNaN() は、値が数値NaN であるかどうかを検査する、より信頼性の高い方法です。あるいは、式x !== x を使用することもできます。どちらの解決策も、グローバルなisNaN() の信頼できない誤検出の影響を受けません。値が数値であるかどうかを検査するには、typeof x === "number" を使用してください。

isNaN() 関数は、「入力は、数値コンテキストで使用した場合、NaN と機能的に同等であるか」という質問に答えます。isNaN(x)false を返す場合、xNaN ではない有効な数値であるかのように、算術式で使用することができます。isNaN(x)true を返す場合、xNaN に強制変換され、ほとんどの算術式はNaN を返します(NaN は伝播するため)。これを使用すると、例えば、関数の引数が算術処理可能(数値と同様に使用可能)であるかどうかをテストし、数値ではない値の場合にエラーを発生させたり、既定値を提供して処理させたりすることができます。このようにして、コンテキストに応じて値を暗黙的に変換することで、 JavaScript が提供する汎用性を最大限に活用する関数を持つことができます。

メモ:+ 演算子は、数値の加算と文字列の連結の両方を実行します。したがって、isNaN() が両方のオペランドに対してfalse を返した場合でも、+ 演算子は算術演算子として使用されないため、文字列を返す場合があります。例えば、isNaN("1")false を返しますが、"1" + 1"11" を返します。確実に数値で処理を行うには、値を数値に変換し、Number.isNaN() を使用して結果を検査してください。

isNaN() は、値NaN でなく、数値でもない値に対してtrue を返すことに注意してください。

js
isNaN(NaN); // trueisNaN(undefined); // trueisNaN({}); // trueisNaN(true); // falseisNaN(null); // falseisNaN(37); // false// 文字列isNaN("37"); // false: "37" は非数でない数値 37 に変換されるisNaN("37.37"); // false: "37.37" は非数でない数値 37.37 に変換されるisNaN("37,5"); // trueisNaN("123ABC"); // true: Number("123ABC") の結果は非数isNaN(""); // false: 空文字列は非数でない 0 に変換されるisNaN(" "); // false: 半角スペースからなる文字列は非数でない 0 に変換される// 日付isNaN(new Date()); // false: Date オブジェクトは数値(タイムスタンプ)に変換されるisNaN(new Date().toString()); // true: Date オブジェクトの文字列表現は数値として解釈できない// 配列isNaN([]); // false: プリミティブ表現は "" となり、数値 0 へ変換されるisNaN([1]); // false: プリミティブ表現は "1" となるisNaN([1, 2]); // true: プリミティブ表現は "1,2" となり、数値として解釈できない

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-isnan-number

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp