Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

const 宣言 は、読み取り専用の値を生成します。不変の値を意味するものではありません、単純に、再アサインできない変数の識別子を意味します。

構文

const name1 = value1 [name2 = value2 [, ... [nameN = valueN]]];
nameN
定数名。正当な 識別子 なら、どんなものでもかまいません。
valueN
定数の値。 正当な なら、どんなものでもかまいません。

説明

この宣言は、グローバルまたは宣言された関数内のローカルな定数を生成します。定数の初期化が必須です。つまり、宣言された文と同じ文で値を指定しなくてはいけません (あとで変更できません)。

定数は、ブロックスコープで let 文を使用して宣言された変数のように動作します。定数の値は、再代入によって変更することができず、かつ定数が再度宣言されることはできません。

let に適用される "temporal dead zone" についてのすべての懸念事項もまた、const にも適用されます。

定数は、同じスコープの中で関数または変数と名前を共有できません。

以下は定数の動作の例です。ブラウザコンソールで試してください。

// NOTE: 定数は大文字や小文字でも宣言できるが、慣例的に大文字を使用する。
// MY_FAV 定数を定義し、7 を初期値で設定する
const MY_FAV = 7;

// Firefox と Chrome ではエラーをスローします (Safari では失敗しません)
MY_FAV = 20;

// 7 が出力される
console.log("my favorite number is: " + MY_FAV);

// 定数を再設定するとエラーになる
const MY_FAV = 20;

// MY_FAV 変数名は定数として予約されているため、これは失敗します。
var MY_FAV = 20;

// これもエラーをスローする。
let MY_FAV = 20;

// ブロックスコープの性質に注意することが重要である
if (MY_FAV === 7) { 
    // これは有効であり、ブロックスコープの MY_FAV を生成する 
    // (ブロックスコープの定数ではない変数として宣言するために let を使用することも可能)
    const MY_FAV = 20;

    // MY_FAV is now 20
    console.log("my favorite number is " + MY_FAV);

    // this gets hoisted into the global context and throws an error
    var MY_FAV = 20;
}

// MY_FAV はまだ 7 のまま
console.log("my favorite number is " + MY_FAV);

// A 定数への割り当ては構文エラー
const A = 1; A = 2;

// 定数宣言での初期化忘れは、エラーをスローする
const FOO;

// 定数はオブジェクトも設定できる。
const MY_OBJECT = {"key": "value"};

// オブジェクトを再設定は失敗します (Firefox と Chrome ではエラーをスローするが Safari では大丈夫)
MY_OBJECT = {"OTHER_KEY": "value"};

// しかし、オブジェクトの属性は保護されてないため、
// 以下のようなステートメントは成功します。
MY_OBJECT.key = "otherValue";

仕様

仕様 ステータス コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Let and Const Declarations の定義
標準 初回定義。
ECMAScript 2017 Draft (ECMA-262)
Let and Const Declarations の定義
ドラフト  

ブラウザ互換性

機能 Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 21 (有) 36 (36) 11 12 5.1
Reassignment fails 20 (有) 13 (13) 11 ? ?
Allowed in sloppy mode 49.0          
機能 Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
基本サポート 未サポート (有) ? ? (有) ? (有)
Reassignment fails 未サポート (有) ? ? (有) ? (有)
Allowed in sloppy mode 未サポート 49.0         49.0

互換性の注記

以前のバージョンの Firefox および Chrome や、Safari 5.1.7 や Opera 12.00 では、const で宣言しても、後から値を変更することができます。 また、Internet Explorer 6-10 ではサポートされていませんが、Internet Explorer 11 では、サポートされています。

Firefox 固有の注記

const 宣言は、ECMAScript 2015 (ES6) の仕様に登場するずっと前から Firefox で実装されていました。const ES6 の適合性については、バグ 950547バグ 611388 をご覧ください。

  • SpiderMonkey 46 (Firefox 46 / Thunderbird 46 / SeaMonkey 2.43) 以前では、SyntaxError の代わりに TypeError が throw されます (バグ 1198833)。
  • SpiderMonkey 46 (Firefox 46 / Thunderbird 46 / SeaMonkey 2.43) からは、
    • {const a=1}; 変数 a は、ReferenceError を throw し、ブロックスコープ内では 1 を返しません。
    • const a; SyntaxError を throw します ("missing = in const declaration"): 初期化が必須です。
    • const a = 1; a = 2; SyntaxError を throw します("invalid assignment to const a")。

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: hgcr, rosskie, YuichiNukiyama, dskmori, yukirin, jungjoo, teoli, Susisu, ethertank, Nanto vi
 最終更新者: hgcr,