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)を表示すれば解決。
この解決法は役立ちましたか?
🔗 関連するエラー
- Uncaught ReferenceError: Cannot access 'x' before initialization — let/constの宣言前にアクセスしている
- Uncaught SyntaxError: Identifier 'x' has already been declared — 同じ変数名を2回宣言している
- Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') — 取得しようとしたHTML要素が見つかっていない
- Uncaught TypeError: Cannot read properties of undefined (reading 'length') — undefinedに対して.lengthを読んでいる
- Uncaught TypeError: Cannot set properties of null (setting 'textContent') — nullに対してプロパティを設定しようとしている
🔗 別カテゴリの関連エラー
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説