Signatur
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 werdenconst-Deklarationen üblicherweise als nicht-hoisted betrachtet.const-Deklarationen erzeugen keine Eigenschaften aufglobalThis, wenn sie auf oberster Ebene eines Skripts deklariert werden.const-Deklarationen können nicht durch eine andere Deklaration im selben Scope neu deklariert werden.constleitet declarations, nicht statements ein. Das bedeutet, dass eine alleinstehendeconst-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
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
Object.freeze() verwendet werden.