From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../reference/statements/const/index.html | 157 +++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 files/ja/web/javascript/reference/statements/const/index.html (limited to 'files/ja/web/javascript/reference/statements/const/index.html') diff --git a/files/ja/web/javascript/reference/statements/const/index.html b/files/ja/web/javascript/reference/statements/const/index.html new file mode 100644 index 0000000000..43adf695ee --- /dev/null +++ b/files/ja/web/javascript/reference/statements/const/index.html @@ -0,0 +1,157 @@ +--- +title: const +slug: Web/JavaScript/Reference/Statements/const +tags: + - ECMAScript 2015 + - JavaScript + - Language feature + - Reference + - Statement + - constants +translation_of: Web/JavaScript/Reference/Statements/const +--- +
{{jsSidebar("Statements")}}
+ +

定数 (const) は、let キーワードを使って定義する変数と同じ、ブロックスコープを持ちます。定数の値は、再代入による変更はできず、再宣言もできません。

+ +
{{EmbedInteractiveExample("pages/js/statement-const.html")}}
+ + + +

構文

+ +
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
+ +
+
nameN
+
定数名。正当な{{Glossary("identifier", "識別子")}}ならは、どんなものでもかまいません。
+
valueN
+
定数の値。正当なならば、どんなものでもかまいません。
+
+ +

分割代入構文は、変数の宣言にも使用できます。

+ +
const { bar } = foo; // where foo = { bar:10, baz:12 };
+/* これは、値が 10 の 'bar' という名前の変数を作成します。*/
+ +
+
+ +

解説

+ +

この宣言は、宣言された場所に応じて、グローバルまたはブロック内にローカルなスコープを持った定数を作成します。グローバルな定数は {{jsxref("Statements/var", "var")}} 変数とは異なり、{{domxref("window")}} オブジェクトのプロパティにはなりません

+ +

定数には初期化子が必要です。その値は、宣言されたのと同じ文の中で指定しなければなりません。(後から変更できないことを考えると、これは理にかなっています)

+ +

const 宣言は、値への読み取り専用の参照を作ります。これは、定数に保持されている値は不変ではなく、その変数の識別子が再代入できないということです。たとえば、定数の中身がオブジェクトの場合、オブジェクトの内容(プロパティなど)は変更可能です。

+ +

一時的なデッドゾーン」に関する考慮事項はすべて、{{jsxref("Statements/let", "let")}} と const の両方に適用されます。

+ +

定数は、同じスコープ内の関数や変数と同じ名前にすることはできません。

+ +

+ +

基本的な定数の使い方

+ +

定数は大文字または小文字で宣言することができますが、すべて大文字で宣言するのが慣例です。

+ +
// MY_FAV を定数として定義して、その値を 7 にします。
+const MY_FAV = 7;
+
+// これはエラーを投げます。
+// Uncaught TypeError: Assignment to constant variable.
+MY_FAV = 20;
+
+// MY_FAV は 7 です。
+console.log('my favorite number is: ' + MY_FAV);
+
+// 定数を再宣言しようとするとエラーを投げます。
+// Uncaught SyntaxError: Identifier 'MY_FAV' has already been declared
+const MY_FAV = 20;
+
+// MY_FAV という名前は上記の定数のために予約されているので、これも失敗します。
+var MY_FAV = 20;
+
+// これもエラーを投げます。
+let MY_FAV = 20;
+
+
+ +

ブロックスコープ

+ +

ブロックスコープの性質に注意することが重要です。

+ +
if (MY_FAV === 7) {
+  // これは問題なく、ブロックスコープの MY_FAV 変数を作成します。
+  // (ブロックスコープの変数を宣言する let も問題なく機能します)
+  let MY_FAV = 20;
+
+  // MY_FAV は現在 20 です。
+  console.log('my favorite number is ' + MY_FAV);
+
+  // これはグローバルコンテキストに巻き上げられ、エラーを投げます。
+  var MY_FAV = 20;
+}
+
+// MY_FAV は 7 のままです。
+console.log('my favorite number is ' + MY_FAV);
+
+ +

定数は初期化が必要です。

+ +
// エラーが投げられます。
+// Uncaught SyntaxError: Missing initializer in const declaration
+
+const FOO;
+
+ +

オブジェクトと配列の定数

+ +

定数はオブジェクトや配列に対しても動作します。

+ +
const MY_OBJECT = {'key': 'value'};
+
+// オブジェクトの上書きはエラーを投げます。
+// Uncaught TypeError: Assignment to constant variable.
+MY_OBJECT = {'OTHER_KEY': 'value'};
+
+// しかしながら、オブジェクトのキーは保護されていないので、
+// 次の文は問題なく実行されます。
+MY_OBJECT.key = 'otherValue'; // Object.freeze() を使用すればオブジェクトを不変にできます。
+
+// 配列も同じです。
+const MY_ARRAY = [];
+// 配列にアイテムをプッシュすることができます。
+MY_ARRAY.push('A'); // ["A"]
+// しかしながら、新しい配列を変数に代入するとエラーを投げます。
+// Uncaught TypeError: Assignment to constant variable.
+MY_ARRAY = ['B'];
+ +

仕様

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.statements.const")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf