Start · Sprachen · JavaScript · Referenz · const

const

Anweisung

Die <code>const</code>-Deklaration deklariert blockskopierte lokale Variablen, deren Wert nicht durch Zuweisung neu gesetzt werden kann.

seit JavaScript ES2015 Kategorie: syntax

Signatur

const name1 = value1; const name1 = value1, name2 = value2; const name1 = value1, name2 = value2, /* …, */ nameN = valueN;

Beschreibung

Die const-Deklaration deklariert blockskopierte lokale Variablen. Der Wert einer Konstanten kann nicht durch eine Neuzuweisung mittels Assignment-Operator geändert werden. Wenn eine Konstante jedoch ein Objekt ist, können ihre Eigenschaften hinzugefügt, aktualisiert oder entfernt werden.

Die const-Deklaration ist der let-Deklaration sehr ähnlich:

  • const-Deklarationen sind sowohl auf Blöcke als auch auf Funktionen skopiert.
  • const-Deklarationen können erst nach der Stelle der Deklaration angesprochen werden (siehe temporal dead zone). Aus diesem Grund werden const-Deklarationen üblicherweise als nicht-hoisted betrachtet.
  • const-Deklarationen erzeugen keine Eigenschaften auf globalThis, wenn sie auf oberster Ebene eines Skripts deklariert werden.
  • const-Deklarationen können nicht durch eine andere Deklaration im selben Scope neu deklariert werden.
  • const leitet declarations, nicht statements ein. Das bedeutet, dass eine alleinstehende const-Deklaration nicht als Rumpf eines Blocks verwendet werden kann (was Sinn ergibt, da es keine Möglichkeit gäbe, auf die Variable zuzugreifen).

if (true) const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context

Ein Initialisierer für eine Konstante ist erforderlich. Sein Wert muss in derselben Deklaration angegeben werden. (Das ergibt Sinn, da er später nicht mehr geändert werden kann.)

const FOO; // SyntaxError: Missing initializer in const declaration

Die const-Deklaration erzeugt eine unveränderliche Referenz auf einen Wert. Das bedeutet nicht, dass der gehaltene Wert unveränderlich ist – sondern nur, dass der Variablen-Identifier nicht neu zugewiesen werden kann. Wenn der Inhalt beispielsweise ein Objekt ist, bedeutet das, dass der Inhalt des Objekts (z. B. seine Eigenschaften) verändert werden kann. const-Deklarationen sollten als „erzeuge eine Variable, deren Identität konstant bleibt" verstanden werden, nicht als „deren Wert konstant bleibt" – oder auch: „erzeuge unveränderliche bindings", nicht „unveränderliche Werte".

Viele Style Guides (einschließlich des MDN-Style-Guides) empfehlen, const gegenüber let zu bevorzugen, wann immer eine Variable in ihrem Scope nicht neu zugewiesen wird. Damit wird die Absicht klargestellt, dass sich der Typ einer Variablen (oder ihr Wert im Fall eines Primitives) niemals ändern kann. Andere bevorzugen möglicherweise let für Nicht-Primitives, die mutiert werden.

Die Liste, die dem const-Schlüsselwort folgt, wird binding list genannt und ist durch Kommata getrennt, wobei die Kommata keine Komma-Operatoren und die =-Zeichen keine Assignment-Operatoren sind. Initialisierer späterer Variablen können auf frühere Variablen in der Liste verweisen.

Parameter

Name Typ Default Beschreibung
$nameN Pflicht identifier Der Name der zu deklarierenden Variable. Jeder Name muss ein gültiger JavaScript-Identifier oder ein destructuring binding pattern sein.
$valueN Pflicht any Initialer Wert der Variable. Es kann jeder gültige Ausdruck sein.

Rückgabewert

Typ
void
Beschreibung
Eine Deklaration hat keinen Rückgabewert.

Beispiele

Grundlegende Verwendung von const

// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;

console.log(`my favorite number is: ${MY_FAV}`);

Fehler bei Neuzuweisung und Neudeklaration

// Re-assigning to a constant variable throws an error
MY_FAV = 20; // TypeError: Assignment to constant variable

// Redeclaring a constant throws an error
const MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
var MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
let MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared

Block-Scoping

const MY_FAV = 7;

if (MY_FAV === 7) {
  // This is fine because it's in a new block scope
  const MY_FAV = 20;
  console.log(MY_FAV); // 20

  // var declarations are not scoped to blocks so this throws an error
  var MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
}

console.log(MY_FAV); // 7

const bei Objekten – Neuzuweisung schlägt fehl

const MY_OBJECT = { key: "value" };
MY_OBJECT = { OTHER_KEY: "value" };

Eigenschaften eines const-Objekts ändern

MY_OBJECT.key = "otherValue";

const bei Arrays – Neuzuweisung schlägt fehl

const MY_ARRAY = [];
MY_ARRAY = ["B"];

Elemente in ein const-Array einfügen

MY_ARRAY.push("A"); // ["A"]

Deklaration mit Destructuring

const result = /(a+)(b+)(c+)/.exec("aaabcc");
const [, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"

// Wichtig · Fallstricke

Um ein Objekt tatsächlich unveränderlich zu machen, muss Object.freeze() verwendet werden.

Siehe auch