Number.isNaN()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Number.isNaN() は静的メソッドで、渡された値が数値型の NaN であるかどうかを判定します。入力が数値型でなかった場合は false を返します。元となるグローバルの isNaN() よりも堅牢な版です。

試してみましょう

構文

js
Number.isNaN(value)

引数

value

NaN かどうか検査される値です。

返値

論理値で、与えられた値が数値で、かつ値が NaN である場合は true を返します。そうでなければ false です。

解説

Number.isNaN() 関数は、NaN と等しいことをチェックする便利な方法を提供します。なお、NaN と等しいことは == 演算子でも === 演算子でも検査できません。JavaScript の他のすべての値との比較とは異なり、一方のオペランドが NaN であれば、もう一方のオペランドが NaN であっても false と評価します。

JavaScript の有効なすべての値の中で、x !== xNaN だけが true になりますので、Number.isNaN(x)x !== x の検査を置き換えることができますが、後者の方が可読性が低くなります。

グローバルの isNaN() 関数とは異なり、 Number.isNaN() は強制的に引数が数値に変換される問題の影響をうけません。これにより、通常 NaN に変換されるが実際には NaN ではない値が、安全に渡されます。つまりこの関数は、数値型であり、かつ NaN である値が渡されたときのみ、 true を返すということです。

isNaN() の使用

js
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true
Number.isNaN(37); // false

Number.isNaN() とグローバルの isNaN() の相違点

Number.isNaN() は引数を数値へ変換することを試みないので、数値でないものはすべて false を返します。以下のものはすべて false になります。

js
Number.isNaN("NaN");
Number.isNaN(undefined);
Number.isNaN({});
Number.isNaN("blabla");
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");

グローバルの isNaN() は、引数を数値に変換します。

js
isNaN("NaN"); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN("blabla"); // true
isNaN(true); // false、これは 1 に変換される
isNaN(null); // false、これは 0 に変換される
isNaN("37"); // false、これは 37 に変換される
isNaN("37.37"); // false、これは 37.37 に変換される
isNaN(""); // false、これは 0 に変換される
isNaN(" "); // false、これは 0 に変換される

仕様書

Specification
ECMAScript Language Specification
# sec-number.isnan

ブラウザーの互換性

BCD tables only load in the browser

関連情報