メインコンテンツまでスキップ

変数と定数

JavaScript では、データを保存するために変数と定数を使用します。

変数(let)

変数は、値を格納するためのコンテナで、その値は後から変更できます。

// 変数の宣言と初期化
let message = "Hello, World!";
console.log(message); // Hello, World!

// 変数の値を変更
message = "こんにちは、世界!";
console.log(message); // こんにちは、世界!
初級者向け解説

let キーワードを使うと、あとから値を変更できる変数を作れます。変数名は自由につけられますが、わかりやすい名前をつけることが大切です。

定数(const)

定数は、一度定義すると別の値に置き換えられないコンテナです。

// 定数の宣言と初期化
const PI = 3.14159;
console.log(PI); // 3.14159

// 定数の値を変更しようとするとエラーになる
// PI = 3.14; // TypeError: Assignment to constant variable.
初級者向け解説

const で宣言した変数は、あとから別の値に置き換えられません。変わらない値(定数)を扱うときに使います。慣習として、変わらない設定値の定数名は大文字で書くことが多いです。

const は「再代入できない」だけで「不変」ではない

const が禁止するのは「変数そのものへの再代入」だけです。オブジェクトや配列の 中身 は変更できます。

const user = { name: "田中" };
user.name = "佐藤"; // ✅ プロパティの変更は OK
console.log(user.name); // 佐藤

// user = {}; // ❌ 再代入はエラー (TypeError)

const numbers = [1, 2, 3];
numbers.push(4); // ✅ 配列への追加も OK
console.log(numbers); // [1, 2, 3, 4]
初級者向け解説

「箱を別の箱に取り替えることはできないが、箱の中身は入れ替えられる」とイメージすれば分かりやすいです。中身まで変更させたくない場合は Object.freeze() を使う方法もあります。

var(古い変数宣言)

古いコードでは var キーワードを見かけることがありますが、最新の JavaScript では letconst を使うことが推奨されています。

// var による変数宣言(非推奨)
var oldVariable = "古い書き方";

// 問題点: 再宣言が可能
var oldVariable = "再宣言してしまった"; // エラーにならない

var の問題点: 関数スコープ

let / const がブロック {} ごとに有効範囲(スコープ)を持つのに対し、var はブロックを無視して関数全体に漏れ出します。

// var はブロック {} を無視して外からも見えてしまう
if (true) {
var leaked = "ブロックの外でも見える";
}
console.log(leaked); // ブロックの外でも見える (漏れている)

// let はブロックスコープ。ブロックの外からは見えない
if (true) {
let blockScoped = "ブロックの中だけ";
}
// console.log(blockScoped); // ❌ ReferenceError
ホイスティングと TDZ

var は宣言が関数の先頭に巻き上げられ(ホイスティング)、宣言前にアクセスしても undefined になります。一方 let / const は宣言前にアクセスすると TDZ(Temporal Dead Zone) により ReferenceError になります。

console.log(a); // undefined (var はエラーにならない)
var a = 1;

console.log(b); // ❌ ReferenceError (let は TDZ でエラー)
let b = 2;

宣言前アクセスがすぐエラーになる let / const の方が、バグを早期に発見できます。

まとめ

宣言再代入スコープ宣言前アクセス
const❌ 不可ブロックTDZ(ReferenceError)
let✅ 可ブロックTDZ(ReferenceError)
var✅ 可関数undefined(非推奨)

基本は const を使い、再代入が必要なときだけ let を使う、var は使わない、と覚えておけば十分です。

次に読む

  • データ型 — 変数に入れる「値」にはどんな種類があるか