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
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.
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.
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.
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.
obj?.foo = 1; // SyntaxError: invalid assignment left-hand side
Stattdessen müssen Sie zuerst den Nullfall abfangen.
if (obj) {
obj.foo = 1;
}