Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. Number.isNaN() / isFinite() / isInteger()

Number.isNaN() / isFinite() / isInteger()対応: ES6(ECMAScript 2015)

値が数値として有効かどうかを判定するための関数です。NaN判定、有限数判定、整数判定の3つのメソッドが用意されています。

構文
// 値がNaNかどうかを判定します。
var result = Number.isNaN(値);

// 値が有限数かどうかを判定します。
var result = Number.isFinite(値);

// 値が整数かどうかを判定します。
var result = Number.isInteger(値);
メソッド一覧
メソッド概要
Number.isNaN(値)値がNaNであるかどうかを判定します。NaNであれば『true』、それ以外は『false』を返します。
Number.isFinite(値)値が有限数であるかどうかを判定します。Infinity、-Infinity、NaNのいずれでもない数値であれば『true』を返します。
Number.isInteger(値)値が整数であるかどうかを判定します。小数部分がない数値であれば『true』を返します。
サンプルコード
// Number.isNaN() はNaNだけをtrueと判定します。
console.log(Number.isNaN(NaN)); // 『true』と出力されます。
console.log(Number.isNaN(123)); // 『false』と出力されます。
console.log(Number.isNaN("abc")); // 『false』と出力されます。文字列はNaNではありません。
console.log(Number.isNaN(undefined)); // 『false』と出力されます。

// NaNは計算に失敗した場合に発生します。
var result = 0 / 0;
console.log(Number.isNaN(result)); // 『true』と出力されます。

// Number.isFinite() は有限数かどうかを判定します。
console.log(Number.isFinite(42)); // 『true』と出力されます。
console.log(Number.isFinite(3.14)); // 『true』と出力されます。
console.log(Number.isFinite(Infinity)); // 『false』と出力されます。
console.log(Number.isFinite(NaN)); // 『false』と出力されます。
console.log(Number.isFinite("42")); // 『false』と出力されます。文字列は数値型ではありません。

// Number.isInteger() は整数かどうかを判定します。
console.log(Number.isInteger(10)); // 『true』と出力されます。
console.log(Number.isInteger(3.14)); // 『false』と出力されます。
console.log(Number.isInteger(10.0)); // 『true』と出力されます。小数部分が0なので整数と判定されます。
実行結果
true     // Number.isNaN(NaN)
false    // Number.isNaN(123)
false    // Number.isNaN("abc")
false    // Number.isNaN(undefined)
true     // Number.isNaN(0 / 0)
true     // Number.isFinite(42)
true     // Number.isFinite(3.14)
false    // Number.isFinite(Infinity)
false    // Number.isFinite(NaN)
false    // Number.isFinite("42")
true     // Number.isInteger(10)
false    // Number.isInteger(3.14)
true     // Number.isInteger(10.0)
isNaN()とNumber.isNaN()の違い

グローバル関数の『isNaN()』と『Number.isNaN()』は動作が異なります。『isNaN()』は引数を数値に変換してからNaN判定を行うため、文字列なども『true』と判定されてしまいます。より正確な判定には『Number.isNaN()』を使用してください。

// グローバルのisNaN() は引数を数値に変換してから判定します。
console.log(isNaN("abc")); // 『true』と出力されます。Number("abc")がNaNになるためです。
console.log(isNaN("123")); // 『false』と出力されます。Number("123")が123になるためです。

// Number.isNaN() は型変換を行わず、NaN自体であるかを判定します。
console.log(Number.isNaN("abc")); // 『false』と出力されます。文字列はNaNそのものではありません。
概要

『Number.isNaN()』『Number.isFinite()』『Number.isInteger()』はES6で追加された数値判定メソッドです。いずれも型変換を行わないため、渡された値が数値型でなければ常に『false』を返します。この動作により、グローバル関数の『isNaN()』や『isFinite()』よりも予測しやすい結果が得られます。

『NaN』はJavaScriptにおける特殊な値で、数値として無効な計算を行った場合に発生します。NaNの特徴として、自分自身と等しくない唯一の値であるという性質があります。そのため『NaN === NaN』は『false』になり、等価演算子ではNaN判定ができません。

実用的な場面として、ユーザーが入力した値を数値に変換した後で『Number.isNaN()』や『Number.isFinite()』を使って有効な数値かどうかを確認する、というパターンがよく使われます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。