JavaScript | 基礎構文:変数・定数 – 再代入の可否とは

JavaScript
スポンサーリンク

再代入の可否とは

変数に一度入れた値を「あとから別の値に入れ替えられるかどうか」です。JavaScriptでは宣言のしかた(let / const)で可否が変わります。


宣言キーワードごとの違い

  • let: 再代入が「できる」
let score = 50;
score = 80;       // OK
console.log(score); // 80
JavaScript
  • const: 再代入が「できない」
const pi = 3.14;
pi = 3.14159;     // エラー(TypeError)
JavaScript
  • 指針: 変わる値は let、変わらない値は const。迷ったら constで始め、必要になったら letに切り替える。

constでも「中身の変更」はできる場合がある

constは「変数が指す参照を変えられない」だけ。オブジェクトや配列の“中身”は変更できます。

  • オブジェクトの中身変更(再代入ではない)
const user = { name: "Taro", age: 20 };
user.age = 21;       // OK(プロパティ更新)
console.log(user.age); // 21

// user = { ... } は再代入 → NG
// user = { name: "Hanako" }; // エラー
JavaScript
  • 配列の中身変更(要素の追加など)
const nums = [1, 2, 3];
nums.push(4);        // OK(中身の変更)
console.log(nums);   // [1, 2, 3, 4]

// nums = [9, 9]; は再代入 → NG
JavaScript
  • 完全に不変にしたい場合
const settings = Object.freeze({ theme: "dark" });
settings.theme = "light"; // 失敗(変更されない)
JavaScript

よくあるつまずきポイント

  • 再宣言は別の話: 同じスコープ内で同じ名前をもう一度「宣言」すること。
    • let/const: 再宣言は不可
    • var: 再宣言できてしまう(推奨されない)
let x = 1;
// let x = 2; // エラー(同じスコープで再宣言は不可)
JavaScript
  • ループのカウンタは letを使う: 値が変化する前提だから。
for (let i = 0; i < 3; i++) {
  console.log(i);
}
JavaScript
  • constの初期化は必須: 値なしで宣言するとエラー。
// const a; // エラー
const a = 10; // OK
JavaScript

使い分けの実践ガイド

  • 基本は const: 変更の可能性がない値(設定、固定メッセージ、関数参照など)
const TAX_RATE = 0.1;
const toYen = amount => Math.round(amount);
JavaScript
  • 変更が必要なら let: 入力値の更新、カウンタ、状態のトグルなど
let isOpen = false;
isOpen = !isOpen; // 再代入で状態切り替え
JavaScript

ミニ練習

  • 問1: 次のコードでエラーになる行はどれ?
const name = "Taro";
let age = 20;
age = 21;
name = "Hanako"; // ここがエラー
JavaScript
  • 問2: 以下のコードは動く?結果は?
const arr = [1, 2];
arr.push(3);     // OK
// arr = [9];    // NG(コメントアウト)
console.log(arr); // [1, 2, 3]
JavaScript
  • 問3: 価格に税を加算していくケース、正しい宣言は?
const TAX = 0.1;     // 変わらないので const
let price = 1000;    // 更新するので let
price = price * (1 + TAX);
JavaScript

まとめ

  • 再代入できるのは let、できないのが const。
  • constでも参照先の“中身”は変更可能(オブジェクト/配列)。
  • 不変にしたいなら Object.freeze を使う。
  • 原則 const、必要なら let にするのが安全で読みやすい。
タイトルとURLをコピーしました