← エラー辞典に戻る

JavaScript

Uncaught TypeError: Assignment to constant variable.

constで宣言した変数に再代入しようとした

こんな症状

変数に値を入れ直そうとしたら「Assignment to constant variable.」と出る。constで宣言した変数への再代入が原因だよ。値を変えたい変数はletで宣言しよう。

まず試す

値を変えたい変数を const → let に変えるだけで直ることがほとんど。

js
// 変更前
const count = 0;
count = count + 1;   // ← ここでエラー

// 変更後
let count = 0;
count = count + 1;   // OK

これで直らなければ、下の「自分のケース」を確認。

🔍 自分のケースはどれ?

  • count++ や count += 1 でエラー
    → それも再代入。その変数を let にする。
  • 関数の引数・ループの中で書き換えている
    → 引数を直接書き換えず、let で受け直すかコピーしてから変更する。
  • const の配列・オブジェクトの「中身」を変えたいだけ
    → それは再代入ではないので const のままでOK(const arr=[]; arr.push(1) は合法)。それでもエラーが出るなら、どこかで obj = … と変数ごと入れ替えていないか探す。

なぜ起きる?

constで宣言した変数に新しい値を代入しようとしているよ。constは「再代入不可」の宣言で、一度設定した値を別の値に変えられないんだ。count++ や count += 1 も再代入なのでエラーになるよ。見落としやすいのは、constで宣言した変数を関数の引数やループの中で書き換えようとしているケース。ちなみに、constで宣言したオブジェクトや配列の「中身」(プロパティや要素)は変更できるよ。禁止されているのは変数そのものへの再代入だけなんだ。

✕ エラーが起きるコード
const count = 0;
count = count + 1;
// Uncaught TypeError: Assignment to constant variable.

const user = { name: "太郎" };
user = { name: "花子" };  // ← これもエラー
✓ 直したコード
// 再代入する変数は let で宣言
let count = 0;
count = count + 1; // OK

// オブジェクトの中身の変更は const でもOK
const user = { name: "太郎" };
user.name = "花子"; // OK(再代入ではない)

✅ 直ったか確認

保存して再読み込み(コンソールなら貼り直し)。赤いエラーが消え、console.log(count) が更新後の値(例:1)を表示すれば解決。

🆘 まだ直らないときは

同じ変数を別の場所でもう一度 const で宣言していないか、ループの外で const 宣言した変数を中で再代入していないかを確認しよう。

Q&Aで質問する →

この解決法は役立ちましたか?

🔗 関連するエラー

🔗 別カテゴリの関連エラー

📖 この問題を学べるレッスン

JSレッスン2:変数とデータ型で根本から理解する →

✏️ 手を動かして練習

このテーマの図解ドリルで実際に書いて確認する →

📝 関連ブログ記事

📖 関連する用語

🚀 JSレッスン2:変数とデータ型で根本解決しよう!

このエラーの背景にある仕組みを、手を動かしながら学べるレッスンがあります。完全無料・登録不要。

JSレッスン2:変数とデータ型へ →

❓ 関連するQ&A