--- title: NaN slug: Web/JavaScript/Reference/Global_Objects/NaN tags: - JavaScript - Property - Reference translation_of: Web/JavaScript/Reference/Global_Objects/NaN --- <div>{{jsSidebar("Objects")}}</div> <p>グローバルプロパティ <code><strong>NaN</strong></code> は<ruby>非数<rp> (</rp><rt>Not-A-Number</rt><rp>) </rp></ruby>を表す値です。</p> <p>{{js_property_attributes(0,0,0)}}</p> <div>{{EmbedInteractiveExample("pages/js/globalprops-nan.html")}}</div> <div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> <h2 id="Description" name="Description">解説</h2> <p><code>NaN</code> は<strong>グローバルオブジェクト</strong>のプロパティです。言い換えれば、グローバルスコープにある変数です。</p> <p><code>NaN</code> の初期値は非数であり、{{jsxref("Number.NaN")}} の値と同等です。最近のブラウザーであれば、 <code>NaN</code> は設定、書き込みがともに不可能なプロパティとなっています。そうでない場合であっても、オーバーライドは無効となります。プログラムの中で <code>NaN</code> を使用するのは、むしろまれなことです。</p> <p><code>NaN</code> を返す演算には5種類があります。</p> <ul> <li>数値が解釈できない (例えば <code>parseInt("blabla")</code> または <code>Number(undefined)</code>)</li> <li>結果が実数にならない数学演算 (例えば <code>Math.sqrt(-1)</code>)</li> <li>オペランドが <code>NaN</code> (例えば <code>7 ** NaN</code>)</li> <li>不確定形 (例えば <code>0 * Infinity</code>)</li> <li>文字列が関わる加算以外の何らかの演算 (例えば <code>"foo" / 3</code>)</li> </ul> <h2 id="Examples" name="Examples">例</h2> <h3 id="Testing_against_NaN" name="Testing_against_NaN">NaN に対するテスト</h3> <p><code>NaN</code> は別の <code>NaN</code> 値を含むあらゆる数と (<code>==</code>、<code>!=</code>、<code>===</code>、<code>!==</code> によって) 同じではないと比較されます。ある値が <code>NaN</code> かどうかを的確に判定するには {{jsxref("Number.isNaN()")}} か {{jsxref("Global_Objects/isNaN", "isNaN()")}} を使用してください。あるいは自己比較を実行しましょう。 <code>NaN</code> は、また <code>NaN</code> だけが、自身と同等ではないと比較評価されます。</p> <pre class="brush: js notranslate">NaN === NaN; // false Number.NaN === NaN; // false isNaN(NaN); // true isNaN(Number.NaN); // true Number.isNaN(NaN); // true function valueIsNaN(v) { return v !== v; } valueIsNaN(1); // false valueIsNaN(NaN); // true valueIsNaN(Number.NaN); // true </pre> <p>ただし、 <code>isNaN()</code> と <code>Number.isNaN()</code> には違いがあることに気をつけてください。前者は、値そのものが <code>NaN</code> であったり、値の変換の結果 <code>NaN</code> になる場合に <code>true</code> を返します。後者は値そのものが <code>NaN</code> のときにだけ <code>true</code> を返します。</p> <pre class="brush: js notranslate">isNaN('hello world'); // true Number.isNaN('hello world'); // false </pre> <p>加えて、配列メソッドの中には <code>NaN</code> を見つけることができるもの、できないものがあります。</p> <pre class="brush: js notranslate">let arr = [2, 4, NaN, 12]; arr.indexOf(NaN); // -1 (false) arr.includes(NaN); // true arr.findIndex(n => Number.isNaN(n)); // 2 </pre> <h2 id="Specifications" name="Specifications">仕様書</h2> <table class="standard-table"> <thead> <tr> <th scope="col">仕様書</th> </tr> </thead> <tbody> <tr> <td>{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}</td> </tr> </tbody> </table> <h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> <p>{{Compat("javascript.builtins.NaN")}}</p> <h2 id="See_also" name="See_also">関連情報</h2> <ul> <li>{{jsxref("Number.NaN")}}</li> <li>{{jsxref("Number.isNaN()")}}</li> <li>{{jsxref("isNaN", "isNaN()")}}</li> </ul>