グローバルプロパティ NaN は非数 (Not-A-Number) を表す値です。
NaN のプロパティ属性 |
|
|---|---|
| 書込可能 | 不可 |
| 列挙可能 | 不可 |
| 設定可能 | 不可 |
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
説明
NaN はグローバルオブジェクトのプロパティです。
NaN の初期値は非数であり、Number.NaN の値と同等です。モダンブラウザであれば、NaN は設定、書き込みがともに不可能なプロパティとなっています。そうでない場合であっても、オーバーライドは無効となります。プログラム中で NaN を使うことは非常にまれです。
処理の戻り値が NaN になるケースは 5 つあります:
- 数値に変換できなかった(例:
parseInt("blabla")、Number(undefined)) Math関数の結果が実数でない(例:Math.sqrt(-1))- 計算式に NaN が含まれている(例:
7 ** NaN) - 計算式が不定形である(例:
0 * Infinity) - 足し算以外の計算式に文字列が含まれている(例:
"foo" / 3)
例
NaN に対するテスト
NaN は別の NaN 値を含むあらゆる数と(==、!=、===、!== によって)同じではないと比較されます。ある値が NaN かどうかを的確に判定するには Number.isNaN() か isNaN() を使用してください。あるいは自己比較を実行しましょう。NaN だけが、自身と同等ではないと比較評価されます。
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
function valueIsNaN(v) { return v !== v; }
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true
ただし、 isNaN() と Number.isNaN() には違いがあることに気をつけてください。前者は、値そのものが NaN であったり、値の変換の結果 NaN になる場合に true を返します。後者は値そのものが NaN のときにだけ true を返します。
isNaN('hello world'); // true
Number.isNaN('hello world'); // false
また、配列のメソッドには NaN を見つけられるものとそうでないものがあります。
let arr = [2, 4, NaN, 12]; arr.indexOf(NaN); // -1 (false) arr.includes(NaN); // true arr.findIndex(n => Number.isNaN(n)); // 2
仕様書
| 仕様書 | 状態 | 備考 |
|---|---|---|
| ECMAScript (ECMA-262) NaN の定義 |
現行の標準 | |
| ECMAScript 2015 (6th Edition, ECMA-262) NaN の定義 |
標準 | |
| ECMAScript 5.1 (ECMA-262) NaN の定義 |
標準 | |
| ECMAScript 1st Edition (ECMA-262) | 標準 | 初回定義。JavaScript 1.3 にて実装 |
ブラウザーの対応
このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 https://github.com/mdn/browser-compat-data をチェックアウトしてプルリクエストを送信してください。
Update compatibility data on GitHub
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NaN | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 4 | Opera 完全対応 4 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
凡例
- 完全対応
- 完全対応