JavaScript
Invalid left-hand side in assignment
代入できないものに代入しようとしている
こんな症状
「Invalid left-hand side in assignment」と表示される。ほとんどの場合、比較のつもりで === を = と書いてしまったのが原因だよ。SyntaxErrorで出ることもReferenceErrorで出ることもあるけど、見るべき場所は同じ。
まず試す
エラー行の = を確認。比較なら === に直す(= は代入、=== は比較)。特に if / while の括弧内を見る。
js
// ❌ 比較のつもりが代入
if (score = 100) {
}
// ✅ 比較は ===
if (score === 100) {
}これで直らなければ、下の「自分のケース」を確認。
🔍 自分のケースはどれ?
- ✓if (x = 5) のように括弧内で = を使った
→ 比較なので === に直す。 - ✓5 = x のように左辺が値になっている
→ 左辺には変数・プロパティを置く。 - ✓a + b = c のように左辺が計算式
→ 計算式は左辺に置けない。代入先の変数を左辺にする。
なぜ起きる?
代入の左辺(=の左側)には、変数やオブジェクトのプロパティなど「値を入れられるもの」しか書けないよ。圧倒的に多いのは、if (score = 100) のように比較演算子(===)を代入演算子(=)と書き間違えるケース。ほかには、5 = x のように左辺が値になっている、a + b = c のように左辺が計算式になっている場合もあるよ。ブラウザや書き方によってSyntaxErrorまたはReferenceErrorとして表示されるけど、原因と直し方は共通だよ。
✕ エラーが起きるコード
const score = 100;
if (score = 100) { // ❌ 比較のつもりが代入
console.log("満点!");
}
// Invalid left-hand side in assignment✓ 直したコード
const score = 100;
if (score === 100) { // ✅ 比較は ===
console.log("満点!");
}✅ 直ったか確認
保存して再読み込み。エラーが消え、条件分岐が意図どおり動けばOK。
この解決法は役立ちましたか?
🔗 関連するエラー
- Expected an assignment or function call — 式を書いただけで代入も呼び出しもしていない
- Uncaught RangeError: Invalid time value — Invalid Date に対して日付メソッドを呼んでいる
- Uncaught ReferenceError: xxx is not defined — 変数・関数名のタイポ
- Uncaught ReferenceError: Cannot access 'x' before initialization — let/constの宣言前にアクセスしている
- RangeError: Invalid array length — 配列の長さに不正な値を指定している
🔗 別カテゴリの関連エラー
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説