diff options
Diffstat (limited to 'files/ja/web/javascript/reference/global_objects/undefined/index.html')
-rw-r--r-- | files/ja/web/javascript/reference/global_objects/undefined/index.html | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/undefined/index.html b/files/ja/web/javascript/reference/global_objects/undefined/index.html new file mode 100644 index 0000000000..6e3c6e1bb1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/undefined/index.html @@ -0,0 +1,143 @@ +--- +title: undefined +slug: Web/JavaScript/Reference/Global_Objects/undefined +tags: + - JavaScript + - Language feature + - Reference + - 言語機能 +translation_of: Web/JavaScript/Reference/Global_Objects/undefined +--- +<div>{{jsSidebar("Objects")}}</div> + +<p>グローバルの <code><strong>undefined</strong></code> プロパティはプリミティブ値 <code>{{Glossary("Undefined", "undefined")}}</code> を表します。これは JavaScript における{{Glossary("Primitive", "プリミティブ型")}}の一つです。</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<div>{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">undefined</pre> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>undefined</code> は、<em>グローバルオブジェクト</em>のプロパティです。すなわちグローバルスコープ内の変数です。 <code>undefined</code> の初期値はプリミティブ値である <code>{{Glossary("Undefined", "undefined")}}</code> です。</p> + +<p>最近のブラウザー (JavaScript 1.8.5 / Firefox 4 以降) での <code>undefined</code> は、 ECMAScript 5 仕様により、設定不可、書込不可のプロパティとなります。 (そうでない場合でも、上書きは避けてください。)</p> + +<p>まだ値が代入されていない変数は <code>undefined</code> 型となります。評価しようとしている変数に値が代入されていない場合、メソッドや文も <code>undefined</code> を返します。値を {{jsxref("Statements/return", "return")}} しない関数も <code>undefined</code> を返します。</p> + +<div class="note"> +<p><strong>ご注意ください</strong> グローバルスコープ以外のスコープでは{{Glossary("Identifier", "識別子")}} (変数名) として使うことができますが (<code>undefined</code> は{{jsxref("Reserved_Words", "予約語", "", 1)}}でないため)、コードの管理やデバッグが困難になるためおすすめできません。</p> + +<pre class="brush: js example-bad notranslate">//こんなことはしないこと! + +// "foo string" をログ出力する +(function() { + var undefined = 'foo'; + console.log(undefined, typeof undefined); +})(); + +// "foo string" をログ出力する +(function(undefined) { + console.log(undefined, typeof undefined); +})('foo'); +</pre> +</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Strict_equality_and_undefined" name="Strict_equality_and_undefined">厳密等価と undefined</h3> + +<p><code>undefined</code> と厳密等価・非等価演算子を使って、変数に値があるか調べることができます。次のコードでは、変数 <code>x</code> が定義されていないため、 <code>if</code> 文は true に評価されます。</p> + +<pre class="brush: js notranslate">var x; +if (x === undefined) { + // ここの文は実行される +} +else { + // ここの文は実行されない +} +</pre> + +<div class="note"> +<p><strong>注:</strong> ここでは、標準の等価演算子ではなく厳密等価演算子を使わないといけません。厳密等価演算子とは違い、 <code>x == undefined</code> は、 <code>x</code> が <code>null</code> であるかどうかもチェックするからです。 <code>null</code> は <code>undefined</code> と等しくありません。</p> + +<p>詳しくは、{{jsxref("Operators/Comparison_Operators", "比較演算子","","true")}}を参照してください。</p> +</div> + +<h3 id="typeof_operator_and_undefined" name="typeof_operator_and_undefined">typeof 演算子と undefined</h3> + +<p>代わりに、 {{jsxref("Operators/typeof", "typeof")}} を使用することができます。</p> + +<pre class="brush: js notranslate">var x; +if (typeof x === 'undefined') { + // ここの文は実行される +} +</pre> + +<p>{{jsxref("Operators/typeof", "typeof")}} を使う理由の一つとして、こちらは変数が宣言されていなくてもエラーにはなりません。</p> + +<pre class="brush: js notranslate">// 直前まで x は宣言されていない +if (typeof x === 'undefined') { // エラーなしで true と評価される + // ここの文は実行される +} + +if (x === undefined) { // ReferenceError が発生 + +} +</pre> + +<p>しかし、もう一つの選択肢があります。JavaScriptは静的にスコープされた言語なので、変数が宣言されているかどうかを知るには、それが含まれるコンテキストで宣言されているかどうかを見ることで読み取ることができます。</p> + +<p>グローバルスコープは{{jsxref("globalThis", "グローバルオブジェクト", "", 1)}}に結びつけられているので、グローバルコンテキストに変数が存在するかどうかのチェックは、<em>グローバルオブジェクト</em>にプロパティが存在することを、 {{jsxref("Operators/in", "in")}} 演算子を使用してチェックすることで行うことができます。</p> + +<pre class="brush: js notranslate">if ('x' in window) { + // x がグローバルに定義されている場合のみ、ここの文を実行 +}</pre> + +<h3 id="void_operator_and_undefined" name="void_operator_and_undefined">void 演算子と undefined</h3> + +<p>3 つ目の方法として、{{jsxref("Operators/void", "void")}} 演算子があります。</p> + +<pre class="brush: js notranslate">var x; +if (x === void 0) { + // ここの文は実行される +} + +// 直前まで y は宣言されていない +if (y === void 0) { + // ReferenceError: y is not defined が発生 +} +</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-undefined', 'undefined')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.undefined")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>JavaScript の {{Glossary("Primitive", "プリミティブ型")}}</li> + <li>{{jsxref("null")}}</li> +</ul> |