TypeError: ungültige Zuweisung zu const "x"

Die JavaScript-Ausnahme "ungültige Zuweisung zu const" tritt auf, wenn versucht wurde, einen Konstantenwert zu ändern. JavaScript const Deklarationen können nicht neu zugewiesen oder neu deklariert werden.

Nachricht

TypeError: Assignment to constant variable. (V8-based)
TypeError: invalid assignment to const 'x' (Firefox)
TypeError: Attempted to assign to readonly property. (Safari)

Fehlertyp

Was ist schiefgelaufen?

Eine Konstante ist ein Wert, der während der normalen Ausführung des Programms nicht verändert werden kann. Sie kann nicht durch Zuweisung geändert werden und kann nicht neu deklariert werden. In JavaScript werden Konstanten mit dem const Schlüsselwort deklariert.

Beispiele

Ungültige Neudeklaration

Die Zuweisung eines Wertes an denselben Konstantennamen im selben Blockscope wird einen Fehler auslösen.

js
const COLUMNS = 80;

// …

COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'

Behebung des Fehlers

Es gibt mehrere Möglichkeiten, diesen Fehler zu beheben. Überprüfen Sie, was mit der betreffenden Konstanten erreicht werden sollte.

Umbenennen

Falls Sie vorhatten, eine andere Konstante zu deklarieren, wählen Sie einen anderen Namen und benennen Sie um. Dieser Konstantenname ist bereits in diesem Scope belegt.

js
const COLUMNS = 80;
const WIDE_COLUMNS = 120;

const, let oder var?

Verwenden Sie const nicht, wenn Sie keine Konstante deklarieren wollten. Vielleicht wollten Sie eine block-skopierte Variable mit let oder eine globale Variable mit var deklarieren.

js
let columns = 80;

// …

columns = 120;

Scoping

Überprüfen Sie, ob Sie sich im richtigen Scope befinden. Sollte diese Konstante in diesem Scope erscheinen, oder war sie für eine Funktion bestimmt?

js
const COLUMNS = 80;

function setupBigScreenEnvironment() {
  const COLUMNS = 120;
}

const und Unveränderlichkeit

Die const Deklaration erstellt eine schreibgeschützte Referenz zu einem Wert. Es bedeutet nicht, dass der von ihr gehaltene Wert unveränderlich ist, sondern nur, dass der Variablenbezeichner nicht neu zugewiesen werden kann. Zum Beispiel, wenn der Inhalt ein Objekt ist, kann dieses Objekt selbst immer noch verändert werden. Das bedeutet, dass Sie den in einer Variablen gespeicherten Wert nicht ändern können:

js
const obj = { foo: "bar" };
obj = { foo: "baz" }; // TypeError: invalid assignment to const `obj'

Aber Sie können die Eigenschaften in einer Variablen ändern:

js
obj.foo = "baz";
obj; // { foo: "baz" }

Siehe auch