Number.isNaN()

Number.isNaN() メソッドは、渡された値が NaN であり、かつその型が Number であるかどうかを判断します。元となるグローバルの isNaN() よりも堅牢な版です。

構文

Number.isNaN(value)

引数

value
NaN かどうかテストされる値です。

返値

与えられた値が NaN であり、かつその型が Number である場合は true、それ以外の場合は false です。

解説

===== の等価演算子ではどちらも、 NaNNaN であるかどうかを検査すると false と評価されてしまうため、 Number.isNaN() 関数が必要となります。この状況は、 JavaScript においてあり得る他のすべての値の比較と異なります。

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

Number.isNaN(NaN);        // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0);      // true

// たとえば、以下の値をisNaN()グローバル関数に渡すと true が返される
Number.isNaN('NaN');      // false
Number.isNaN(undefined);  // false
Number.isNaN({});         // false
Number.isNaN('blabla');   // false

// 以下はすべて false を返す
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN('37');
Number.isNaN('37.37');
Number.isNaN('');
Number.isNaN(' ');

ポリフィル

次のコードが動作するのは、 NaN が Javascript で唯一自分自身と等しくない値だからです。

Number.isNaN = Number.isNaN || function(value) {     
    return value !== null && (value != value || +value != value);
}

仕様書

仕様書 状態 備考
ECMAScript Latest Draft (ECMA-262)
Number.isnan の定義
ドラフト
ECMAScript 2015 (6th Edition, ECMA-262)
Number.isnan の定義
標準 初回定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
isNaNChrome 完全対応 25Edge 完全対応 12Firefox 完全対応 15IE 未対応 なしOpera 完全対応 ありSafari 完全対応 9WebView Android 完全対応 ありChrome Android 完全対応 25Firefox Android 完全対応 15Opera Android 完全対応 ありSafari iOS 完全対応 9Samsung Internet Android 完全対応 ありnodejs 完全対応 0.10

凡例

完全対応  
完全対応
未対応  
未対応

関連情報