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()
よりも堅牢な版です。
試してみましょう
構文
Number.isNaN(value)
引数
返値
論理値で、与えられた値が数値で、かつ値が 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() の使用
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
になります。
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()
は、引数を数値に変換します。
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