const (JavaScript)
読み:コンスト
外語:const

 JavaScriptに3種類ある変数・定数宣言のうちの一つで、ブロックスコープの定数を宣言する。ECMAScript 2015 (ES6)から追加された。
目次

概要
 「定数」を定義するために使う、一般的な宣言である。
 但し実際には、読み取り専用の値を生成するためのもので、不変の値を保証するものではない。これはJavaScriptに限らず、他のプログラミング言語でも共通の認識である。

構文
 const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
 カンマで区切って1行に複数の変数を宣言できる。また、それぞれで初期値の定義が必須である。

補足

不変ではない
 constは英語のconstantの略で、意味は「定数」や「不変」である。
 但し、JavaScriptの言語仕様として不変を保証するのは、再代入による変更ができず、再宣言もできないことだけで、「その内容」が変化しないことまでは保証していない。特に配列などのオブジェクトは内容が変化しうるので、constだからといって油断すると予期しないバグを招く。
 const arr1 = ['AAA', 'BBB', 'CCC'];
 const arr2 = arr1;
 この時、実はarr1とarr2は同じオブジェクトを指している。またconstの配列も操作は可能である。結果、arr2に追加や削除をするとarr1も変化する。
 arr2.pop();
 console.log(arr1); // 出力は ['AAA', 'BBB'] となる
 console.log(arr2); // 出力は ['AAA', 'BBB'] となる
 こういった、変化しない配列をconstで持っておきたい時は、次のように concat() を使うと複製を作ることができる。
 const arr1 = ['AAA', 'BBB', 'CCC'];
 const arr2 = arr1.concat();
 arr2.pop();
 console.log(arr1); // 出力は ['AAA', 'BBB', 'CCC'] となる
 console.log(arr2); // 出力は ['AAA', 'BBB'] となる

Firefoxでの実装
 ECMAScript 2015 (ES6)策定の何年も前から、Mozilla FirefoxのJavaScriptエンジンSpiderMonkeyにはletとともにconstのサポートがあったことが知られる。しかしこのconstはvarと同様にグローバルスコープだった。
 Mozilla Firefoxでも、ECMAScript 2015 (ES6)準拠のためにFirefox 44以降ではブロックスコープとなるよう仕様変更されている。

再検索