SyntaxError: invalid assignment left-hand side

Die JavaScript-Ausnahme "ungültige Zuweisung auf der linken Seite" tritt auf, wenn irgendwo eine unerwartete Zuweisung erfolgt ist. Dies kann ausgelöst werden, wenn ein einzelnes = Zeichen anstelle von == oder === verwendet wurde.

Meldung

SyntaxError: Invalid left-hand side in assignment (V8-based)
SyntaxError: invalid assignment left-hand side (Firefox)
SyntaxError: Left side of assignment is not a reference. (Safari)

ReferenceError: Invalid left-hand side in assignment (V8-based)
ReferenceError: cannot assign to function call (Firefox)
ReferenceError: Left side of assignment is not a reference. (Safari)

Fehlertyp

SyntaxError oder ReferenceError, abhängig von der Syntax.

Was ist schiefgelaufen?

Es gab irgendwo eine unerwartete Zuweisung. Dies kann beispielsweise durch eine Verwechslung eines Zuweisungsoperators und eines Gleichheitsoperators verursacht werden. Während ein einzelnes = Zeichen einem Variablen einen Wert zuweist, vergleichen die == oder === Operatoren einen Wert.

Beispiele

Typische ungültige Zuweisungen

js
if (Math.PI + 1 = 3 || Math.PI + 1 = 4) {
  console.log("no way!");
}
// SyntaxError: invalid assignment left-hand side

const str = "Hello, "
+= "is it me "
+= "you're looking for?";
// SyntaxError: invalid assignment left-hand side

In der if-Anweisung möchten Sie einen Gleichheitsoperator (===) verwenden, und für die Zeichenkettenverkettung wird der Plus (+) Operator benötigt.

js
if (Math.PI + 1 === 3 || Math.PI + 1 === 4) {
  console.log("no way!");
}

const str = "Hello, "
  + "from the "
  + "other side!";

Zuweisungen, die ReferenceErrors erzeugen

Ungültige Zuweisungen führen nicht immer zu Syntaxfehlern. Manchmal ist die Syntax fast korrekt, aber zur Laufzeit wird der Ausdruck auf der linken Seite in einen Wert anstatt in eine Referenz ausgewertet, sodass die Zuweisung immer noch ungültig ist. Solche Fehler treten später während der Ausführung auf, wenn die Anweisung tatsächlich ausgeführt wird.

js
function foo() {
  return { a: 1 };
}
foo() = 1; // ReferenceError: invalid assignment left-hand side

Funktionsaufrufe, new-Aufrufe, super() und this sind alle Werte anstatt Referenzen. Wenn Sie diese auf der linken Seite verwenden möchten, muss das Zuweisungsziel eine Eigenschaft ihrer erzeugten Werte sein.

js
function foo() {
  return { a: 1 };
}
foo().a = 1;

Hinweis: In Firefox und Safari erzeugt das erste Beispiel einen ReferenceError im Nicht-Strikt-Modus und einen SyntaxError im Strikt-Modus. Chrome wirft einen Laufzeit-ReferenceError sowohl im Strikt- als auch im Nicht-Strikt-Modus.

Verwendung der optionalen Verkettung als Zuweisungsziel

Optionale Verkettung ist kein gültiges Ziel einer Zuweisung.

js
obj?.foo = 1; // SyntaxError: invalid assignment left-hand side

Stattdessen müssen Sie zuerst den Nullfall abfangen.

js
if (obj) {
  obj.foo = 1;
}

Siehe auch