JavaScript const
const
キーワードはES6(2015)で導入されました。
const
で定義された変数は再宣言できません。
const
で定義された変数は再代入できません。
const
で定義された変数はブロックスコープを持ちます。
再代入不可
const
変数は再代入できません。
割り当てる必要があります
JavaScriptのconst
変数には、宣言時に値を割り当てる必要があります。
正しい
const PI = 3.14159265359;
間違い
const PI;
PI = 3.14159265359;
値を変更してはならないことがわかっている場合は、常に変数をconstで宣言します。
以下を宣言する場合はconst
を使用します。
• 新しい配列
• 新しいオブジェクト
• 新しい関数
• 新しい正規表現
定数オブジェクトと配列
const
というキーワードは少し誤解を招きます。
定数値を定義するものではありません。値への定数参照を定義します。
このため、次のことはできません。
- 定数値の再代入
- 定数配列の再代入
- 定数オブジェクトの再代入
- 定数配列の要素を変更する
- 定数オブジェクトのプロパティを変更する
定数配列
定数配列の要素を変更できます。
例
// 定数配列を作成できます
const cars = ["Saab", "Volvo", "BMW"];
// 要素を変更できます
cars[0] = "Toyota";
// 要素を追加できます
cars.push("Audi");
ただし、配列を再代入することはできません。
定数オブジェクト
定数オブジェクトのプロパティを変更できます。
例
// 定数オブジェクトを作成できます
const car = {type:"フィアット", model:"500", color:"白"};
// プロパティを変更できます
car.color = "red";
// プロパティを追加できます
car.owner = "Johnson";
ただし、オブジェクトを再代入することはできません。
例
const car = {type:"フィアット", model:"500", color:"白"};
car = {type:"ボルボ", model:"EX60", color:"red"}; // エラー
ブラウザのサポート
const
キーワードはInternet Explorerでは完全にはサポートされていません。
次の表は、const
キーワードを完全にサポートする最初のブラウザのバージョンを明示しています。
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
2016年3月 | 2015年7月 | 2015年2月 | 2017年9月 | 2016年3月 |
ブロックスコープ
const
を使用した変数の宣言は、ブロックスコープに関して言えばlet
と似ています。
この例では、ブロック内で宣言されたxは、ブロック外で宣言されたxと同じではありません。
ブロック スコープの詳細については、JavaScriptスコープを参照してください。
再宣言
JavaScript var
変数の再宣言は、プログラム内のどこでも許可されます。
例
var x = 2; // 許されます
var x = 3; // 許されます
x = 4; // 許されます
同じスコープ内で既存のvar
またはlet
変数をconst
に再宣言することは許可されません。
例
var x = 2; // 許されます
const x = 2; // 許されません
{
let x = 2; // 許されます
const x = 2; // 許されません
}
{
const x = 2; // 許されます
const x = 2; // 許されません
}
const
変数を再代入することは許可されていません。
例
const x = 2; // 許されます
x = 2; // 許されません
var x = 2; // 許されません
let x = 2; // 許されません
const x = 2; // 許されません
{
const x = 2; // 許されます
x = 2; // 許されません
var x = 2; // 許されません
let x = 2; // 許されません
const x = 2; // 許されません
}
別のスコープまたは別のブロックでconst
を使用して変数を再宣言することは許可されます。
例
const x = 2; // 許されます
{
const x = 3; // 許されます
}
{
const x = 4; // 許されます
}
巻き上げ
var
で定義された変数は最上位に巻き上げられ、いつでも初期化できます。
意味: 宣言する前でも変数を使用できます。
const
で定義された変数も先頭に巻き上げられますが、初期化されません。
意味: const
変数を宣言する前に使用すると、ReferenceError
が発生します。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。