aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/global_objects/nan/index.md
blob: 8b8d8261317ae726d1725ff6974229a551a2de04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
---
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 =&gt; 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>