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. Sie kann ausgelöst werden, wenn ein einzelnes =-Zeichen anstelle von == oder === verwendet wurde.
Nachricht
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 könnte beispielsweise auf eine Verwechslung zwischen einem Zuordnungsoperator und einem Gleichheitsoperator zurückzuführen sein. Während ein einzelnes =-Zeichen einen Wert einer Variablen 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 Zeichenfolgenverkettung 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!";
Zuordnungen, 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 zu einem Wert statt einer Referenz ausgewertet, sodass die Zuweisung dennoch ungültig ist. Solche Fehler treten später bei 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 statt Referenzen. Wenn Sie sie auf der linken Seite verwenden möchten, muss das Zuweisungsziel eine Eigenschaft der von ihnen produzierten 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 strikten Modus. Chrome wirft einen Laufzeit-ReferenceError für sowohl strikte als auch nicht-strikte Modi.
Verwendung der Optionalen Verkettung als Zuweisungsziel
Optionale Verkettung ist kein gültiges Zuweisungsziel.
obj?.foo = 1; // SyntaxError: invalid assignment left-hand side
Stattdessen müssen Sie zunächst den null-ISH-Fall absichern.
if (obj) {
obj.foo = 1;
}