const
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Die const
-Deklaration deklariert block-skopierte lokale Variablen. Der Wert einer Konstante kann nicht durch Zuweisung mit dem Zuweisungsoperator geändert werden, aber wenn eine Konstante ein Objekt ist, können ihre Eigenschaften hinzugefügt, aktualisiert oder entfernt werden.
Probieren Sie es aus
const number = 42;
try {
number = 99;
} catch (err) {
console.log(err);
// Expected output: TypeError: invalid assignment to const 'number'
// (Note: the exact output may be browser-dependent)
}
console.log(number);
// Expected output: 42
Syntax
const name1 = value1;
const name1 = value1, name2 = value2;
const name1 = value1, name2 = value2, /* …, */ nameN = valueN;
nameN
-
Der Name der zu deklarierenden Variablen. Jeder Name muss ein gültiger JavaScript-Bezeichner oder ein Destrukturierungsbindungsmuster sein.
valueN
-
Anfangswert der Variablen. Es kann jeder gültige Ausdruck sein.
Beschreibung
Die const
-Deklaration ist der let
-Deklaration sehr ähnlich:
-
const
-Deklarationen sind sowohl auf Blöcke als auch auf Funktionen begrenzt. -
const
-Deklarationen können erst nach Erreichen des Deklarationsortes zugegriffen werden (siehe zeitlicher toter Bereich). Aus diesem Grund werdenconst
-Deklarationen häufig als nicht-hoisted angesehen. -
const
-Deklarationen erstellen keine Eigenschaften aufglobalThis
, wenn sie auf der obersten Ebene eines Scripts deklariert werden. -
const
-Deklarationen können nicht durch eine andere Deklaration im selben Gültigkeitsbereich neu deklariert werden. -
const
beginnt Deklarationen, nicht Anweisungen. Das bedeutet, dass Sie keine alleinstehendeconst
-Deklaration als Körper eines Blocks verwenden können (was sinnvoll ist, da es keinen Weg gibt, auf die Variable zuzugreifen).jsif (true) const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
Ein Initialisierer für eine Konstante ist erforderlich. Sie müssen ihren Wert in derselben Deklaration angeben. (Das ist sinnvoll, da sie später nicht geändert werden kann.)
const FOO; // SyntaxError: Missing initializer in const declaration
Die const
-Deklaration erstellt eine unveränderbare Referenz auf einen Wert. Sie bedeutet nicht, dass der Wert selbst unveränderlich ist — nur dass der Variablenbezeichner nicht neu zugewiesen werden kann. Wenn der Inhalt ein Objekt ist, bedeutet dies, dass die Inhalte des Objekts (z. B. seine Eigenschaften) verändert werden können. Sie sollten const
-Deklarationen verstehen als "erstelle eine Variable, deren Identität konstant bleibt", nicht "deren Wert konstant bleibt" — oder "erstelle unveränderliche Bindings", nicht "unveränderliche Werte".
Viele Stilrichtlinien (einschließlich der MDN-Richtlinien) empfehlen die Verwendung von const
über let
, wann immer eine Variable in ihrem Gültigkeitsbereich nicht neu zugewiesen wird. Dies macht klar, dass der Typ (oder der Wert, im Falle einer primitiven Variable) einer Variablen sich niemals ändern kann. Andere bevorzugen möglicherweise let
für nicht-primitives, das verändert wird.
Die Liste, die dem const
-Schlüsselwort folgt, wird als Binding-Liste bezeichnet und durch Kommata getrennt, wobei die Kommata keine Kommaoperatoren und die =
-Zeichen keine Zuweisungsoperatoren sind. Initialisierer von späteren Variablen können sich auf frühere Variablen in der Liste beziehen.
Beispiele
Grundlegende Verwendung von const
Konstanten können mit Groß- oder Kleinbuchstaben deklariert werden, aber eine gängige Konvention ist die Verwendung von nur Großbuchstaben, besonders für Primitive, da sie wirklich unveränderlich sind.
// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;
console.log("my favorite number is: " + MY_FAV);
// 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-Skoping
Es ist wichtig, die Natur des Block-Skopings zu beachten.
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 in Objekten und Arrays
const
funktioniert auch bei Objekten und Arrays. Der Versuch, das Objekt zu überschreiben, führt zu einem Fehler "Zuweisung an konstante Variable".
const MY_OBJECT = { key: "value" };
MY_OBJECT = { OTHER_KEY: "value" };
Allerdings sind Objektschlüssel nicht geschützt, sodass die folgende Anweisung ohne Probleme ausgeführt wird.
MY_OBJECT.key = "otherValue";
Sie müssten Object.freeze()
verwenden, um ein Objekt unveränderlich zu machen.
Dasselbe gilt für Arrays. Die Zuweisung eines neuen Arrays zur Variablen führt zu einem Fehler "Zuweisung an konstante Variable".
const MY_ARRAY = [];
MY_ARRAY = ["B"];
Es ist jedoch weiterhin möglich, Elemente in das Array zu pushen und es dadurch zu verändern.
MY_ARRAY.push("A"); // ["A"]
Deklaration mit Destrukturierung
Die linke Seite jedes =
kann auch ein Bindungsmuster sein. Dies ermöglicht das Erstellen mehrerer Variablen auf einmal.
const result = /(a+)(b+)(c+)/.exec("aaabcc");
const [, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"
Für weitere Informationen siehe Destrukturierung.
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-let-and-const-declarations |
Browser-Kompatibilität
BCD tables only load in the browser