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 !== x
は NaN
だけが 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