From 5a1a2b08dd33b13a0413bcdd38eab753b8c44104 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 9 Jan 2022 14:25:12 +0900 Subject: 2021/07/22 時点の英語版に同期 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/global_objects/undefined/index.md | 142 ++++++++++----------- 1 file changed, 66 insertions(+), 76 deletions(-) diff --git a/files/ja/web/javascript/reference/global_objects/undefined/index.md b/files/ja/web/javascript/reference/global_objects/undefined/index.md index d4f0e54903..57d3759933 100644 --- a/files/ja/web/javascript/reference/global_objects/undefined/index.md +++ b/files/ja/web/javascript/reference/global_objects/undefined/index.md @@ -3,85 +3,85 @@ title: undefined slug: Web/JavaScript/Reference/Global_Objects/undefined tags: - JavaScript - - Language feature - - Reference - 言語機能 + - リファレンス +browser-compat: javascript.builtins.undefined translation_of: Web/JavaScript/Reference/Global_Objects/undefined --- -
{{jsSidebar("Objects")}}
+{{jsSidebar("Objects")}} -

グローバルの undefined プロパティはプリミティブ値 {{Glossary("Undefined", "undefined")}} を表します。これは JavaScript における{{Glossary("Primitive", "プリミティブ型")}}の一つです。

+グローバルの **`undefined`** プロパティはプリミティブ値の `{{Glossary("Undefined", "undefined")}}` を表します。これは JavaScript における{{Glossary("Primitive", "プリミティブ型")}}の一つです。 -

{{js_property_attributes(0,0,0)}}

+{{js_property_attributes(0,0,0)}} -
{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}
+{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}} - +## 構文 -

構文

+```js +undefined +``` -
undefined
+## 解説 -

解説

+`undefined` は、*グローバルオブジェクト*のプロパティです。すなわちグローバルスコープ内の変数です。 `undefined` の初期値はプリミティブ値である `{{Glossary("Undefined", "undefined")}}` です。 -

undefined は、グローバルオブジェクトのプロパティです。すなわちグローバルスコープ内の変数です。 undefined の初期値はプリミティブ値である {{Glossary("Undefined", "undefined")}} です。

+最近のブラウザー (JavaScript 1.8.5 / Firefox 4 以降) での `undefined` は、 ECMAScript 5 仕様により、設定不可、書込不可のプロパティとなります。 (そうでない場合でも、上書きは避けてください。) -

最近のブラウザー (JavaScript 1.8.5 / Firefox 4 以降) での undefined は、 ECMAScript 5 仕様により、設定不可、書込不可のプロパティとなります。 (そうでない場合でも、上書きは避けてください。)

+まだ値が代入されていない変数は `undefined` 型となります。評価しようとしている変数に値が代入されていない場合、メソッドや文も `undefined` を返します。値を {{jsxref("Statements/return", "return")}} しない関数も `undefined` を返します。 -

まだ値が代入されていない変数は undefined 型となります。評価しようとしている変数に値が代入されていない場合、メソッドや文も undefined を返します。値を {{jsxref("Statements/return", "return")}} しない関数も undefined を返します。

+> **Note:** グローバルスコープ以外のスコープでは `undefined` を{{Glossary("identifier", "識別子")}} (変数名) として使うことができますが (`undefined` は{{jsxref("Lexical_grammar", "予約語", "", 1)}}でないため)、コードの管理やデバッグが困難になるためおすすめできません。 +> +> ```js example-bad +> //こんなことはしないこと! +> +> // "foo string" をログ出力する +> (function() { +> var undefined = 'foo'; +> console.log(undefined, typeof undefined); +> })(); +> +> // "foo string" をログ出力する +> (function(undefined) { +> console.log(undefined, typeof undefined); +> })('foo'); +> ``` -
-

ご注意ください グローバルスコープ以外のスコープでは{{Glossary("Identifier", "識別子")}} (変数名) として使うことができますが (undefined は{{jsxref("Reserved_Words", "予約語", "", 1)}}でないため)、コードの管理やデバッグが困難になるためおすすめできません。

+## 例 -
//こんなことはしないこと!
+### 厳密等価と undefined
 
-// "foo string" をログ出力する
-(function() {
-  var undefined = 'foo';
-  console.log(undefined, typeof undefined);
-})();
+`undefined` と厳密等価・非等価演算子を使って、変数に値があるか調べることができます。次のコードでは、変数 `x` が定義されていないため、 `if` 文は true に評価されます。
 
-// "foo string" をログ出力する
-(function(undefined) {
-  console.log(undefined, typeof undefined);
-})('foo');
-
-
- -

- -

厳密等価と undefined

- -

undefined と厳密等価・非等価演算子を使って、変数に値があるか調べることができます。次のコードでは、変数 x が定義されていないため、 if 文は true に評価されます。

- -
var x;
+```js
+var x;
 if (x === undefined) {
   // ここの文は実行される
 }
 else {
   // ここの文は実行されない
 }
-
- -
-

注: ここでは、標準の等価演算子ではなく厳密等価演算子を使わないといけません。厳密等価演算子とは違い、 x == undefined は、 xnull であるかどうかもチェックするからです。 nullundefined と等しくありません。

+``` -

詳しくは、{{jsxref("Operators/Comparison_Operators", "比較演算子","","true")}}を参照してください。

-
+> **Note:** ここでは、標準の等価演算子ではなく厳密等価演算子を使わないといけません。厳密等価演算子とは違い、 `x == undefined` は、 `x` が `null` であるかどうかもチェックするからです。 `null` は `undefined` と等しくありません。 +> +> 詳しくは、{{jsxref("Operators", "比較演算子","","true")}}を参照してください。 -

typeof 演算子と undefined

+### typeof 演算子と undefined -

代わりに、 {{jsxref("Operators/typeof", "typeof")}} を使用することができます。

+代わりに、 {{jsxref("Operators/typeof", "typeof")}} を使用することができます。 -
var x;
+```js
+var x;
 if (typeof x === 'undefined') {
    // ここの文は実行される
 }
-
+``` -

{{jsxref("Operators/typeof", "typeof")}} を使う理由の一つとして、こちらは変数が宣言されていなくてもエラーにはなりません。

+{{jsxref("Operators/typeof", "typeof")}} を使う理由の一つとして、こちらは変数が宣言されていなくてもエラーにはなりません。 -
// 直前まで x は宣言されていない
+```js
+// 直前まで x は宣言されていない
 if (typeof x === 'undefined') { // エラーなしで true と評価される
    // ここの文は実行される
 }
@@ -89,21 +89,24 @@ if (typeof x === 'undefined') { // エラーなしで true と評価される
 if (x === undefined) { // ReferenceError が発生
 
 }
-
+``` -

しかし、もう一つの選択肢があります。JavaScriptは静的にスコープされた言語なので、変数が宣言されているかどうかを知るには、それが含まれるコンテキストで宣言されているかどうかを見ることで読み取ることができます。

+しかし、もう一つの選択肢があります。 JavaScript は静的にスコープされた言語なので、変数が宣言されているかどうかを知るには、それが含まれるコンテキストで宣言されているかどうかを見ることで読み取ることができます。 -

グローバルスコープは{{jsxref("globalThis", "グローバルオブジェクト", "", 1)}}に結びつけられているので、グローバルコンテキストに変数が存在するかどうかのチェックは、グローバルオブジェクトにプロパティが存在することを、 {{jsxref("Operators/in", "in")}} 演算子を使用してチェックすることで行うことができます。

+グローバルスコープは{{jsxref("globalThis", "グローバルオブジェクト", "", 1)}}に結びつけられているので、グローバルコンテキストに変数が存在するかどうかのチェックは、グローバルオブジェクトにプロパティが存在することを、 {{jsxref("Operators/in", "in")}} 演算子を使用してチェックすることで行うことができます。 -
if ('x' in window) {
+```js
+if ('x' in window) {
   // x がグローバルに定義されている場合のみ、ここの文を実行
-}
+} +``` -

void 演算子と undefined

+### void 演算子と undefined -

3 つ目の方法として、{{jsxref("Operators/void", "void")}} 演算子があります。

+3 つ目の方法として、{{jsxref("Operators/void", "void")}} 演算子があります。 -
var x;
+```js
+var x;
 if (x === void 0) {
   // ここの文は実行される
 }
@@ -112,30 +115,17 @@ if (x === void 0) {
 if (y === void 0) {
   // ReferenceError: y is not defined が発生
 }
-
+``` -

仕様書

+## 仕様書 - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-undefined', 'undefined')}}
+{{Specifications}} -

ブラウザーの互換性

+## ブラウザーの互換性 -

{{Compat("javascript.builtins.undefined")}}

+{{Compat}} -

関連情報

+## 関連情報 - +- JavaScript の {{Glossary("Primitive", "プリミティブ型")}} +- {{jsxref("null")}} -- cgit v1.2.3-54-g00ecf