← エラー辞典に戻る

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。

🆘 まだ直らないときは

ESLint の no-cond-assign ルールで、条件内のうっかり代入を自動検出できる。

Q&Aで質問する →

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

🔗 関連するエラー

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

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

JSレッスン3:条件分岐で根本から理解する →

✏️ 手を動かして練習

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

📝 関連ブログ記事

📖 関連する用語

🚀 JSレッスン3:条件分岐で根本解決しよう!

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

JSレッスン3:条件分岐へ →

❓ 関連するQ&A