This article is in need of an editorial review.
これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。
読み取り専用の名前付き定数を宣言します。
構文
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
引数
nameN- 定数名。正当な識別子なら、どんなものでもかまいません。
valueN- 定数の値。 正当な式なら、どんなものでもかまいません。
説明
グローバルな、または内部でその定数が宣言された関数にローカルな定数を作成します。定数は、変数と同じスコープ規則に従います。
定数の値は再代入によって変更することができず、かつ定数が再度宣言されることはできません。このため、定数を初期化することなく宣言することは可能ですが、そうしても役に立たないでしょう。
定数は、同じスコープの中で関数または変数と名前を共有できません。
const は Mozilla 特有の拡張であり、IE ではサポートされていませんが、Opera ではバージョン 9.0 からサポートされました。
例
以下は定数の動作の例です。ブラウザコンソールから試してください。
// 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;
// MY_FAVはまだ7のまま
console.log("my favorite number is " + MY_FAV);
// Assigning to A const variable is a syntax error
const A = 1; A = 2;
// 定数は初期値が必要です。
const FOO; // SyntaxError: missing = in const declaration
// 定数はオブジェクトも設定できる。
const MY_OBJECT = {"key": "value"};
// オブジェクトを再設定は失敗します(FirefoxとChromeでは失敗するがSafariでは大丈夫)
MY_OBJECT = {"OTHER_KEY": "value"};
// しかし、オブジェクトの属性は保護されてないため、
// 以下のようなステートメントは成功します。
MY_OBJECT.key = "otherValue";
Specifications
| Specification | Status | Comment |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Let and Const Declarations' in that specification. |
Standard | Initial definition. |
ブラウザ間の互換性
現在の const の実装は Mozilla 特有の拡張であり、ECMAScript5 の一部ではありません。これは Firefox および Chrome (V8) でサポートされています。Safari 5.1.7 や Opera 12.00 では、const で宣言しても、後から値を変更することができます。 また、Internet Explorer 6-10 ではサポートされていません。 const キーワードは現在、関数スコープ内で(var で変数を宣言するように)定数を宣言します。
Firefox のバージョン13以降では、定数を再度宣言すると TypeError を throw します。メジャーなブラウザでは定数に別の値を代入しても警告やエラーを出しません。そのような操作の返り値は新しく代入される値となりますが、Firefox や Chrome(バージョン20以降)では再代入は失敗します。
const は ECMAScript 6 で定義される予定ですが、意味が異なります。let で宣言された変数と同じように、const で宣言された定数はブロックスコープとなります。
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | ? | 36 (36) | 11 | 12 | 5.1 |
| Reassignment fails | 20 | 13 (13) | 11 | ? | ? |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | ? | ? | ? | ? | ? | ? |
| Reassignment fails | ? | ? | ? | ? | ? | ? |
Compatibility notes
In earlier versions of Firefox & Chrome and as of Safari 5.1.7 and Opera 12.00, if you define a variable with const, you can still change its value later. It is not supported in Internet Explorer 6-10, but is included in Internet Explorer 11.