Number.isNaN()

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

関連情報