Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
const
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Dieconst-Deklaration deklariert block-skopierte lokale Variablen. Der Wert einer Konstante kann nicht durch Zuweisung mit demZuweisungsoperator geändert werden, aber wenn eine Konstante einObjekt ist, können ihre Eigenschaften hinzugefügt, aktualisiert oder entfernt werden.
In diesem Artikel
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: 42Syntax
const name1 = value1;const name1 = value1, name2 = value2;const name1 = value1, name2 = value2, /* …, */ nameN = valueN;nameNDer Name der zu deklarierenden Variablen. Jeder muss ein legaler JavaScript-Bezeichner oder einDestructuring-Bindungsmuster sein.
valueNAnfangswert der Variablen. Es kann jeder legale Ausdruck sein.
Beschreibung
Dieconst-Deklaration ist sehr ähnlich zulet:
const-Deklarationen sind auf Blöcke sowie auf Funktionen beschränkt.const-Deklarationen können nur nach dem Erreichen des Deklarationsortes zugegriffen werden (siehetemporal dead zone). Aus diesem Grund werdenconst-Deklarationen häufig alsnicht-hoisted angesehen.const-Deklarationen erstellen keine Eigenschaften aufglobalThis, wenn sie auf oberster Ebene eines Skripts deklariert werden.const-Deklarationen können nicht durch eine andere Deklaration im selben Gültigkeitsbereicherneut deklariert werden.constbeginnenDeklarationen, nicht _Anweisungen. Das bedeutet, dass Sie keine alleinstehendeconst-Deklaration als Körper eines Blocks verwenden können (was sinnvoll ist, da es keine Möglichkeit 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 seinen Wert in derselben Deklaration angeben. (Das macht Sinn, da er später nicht geändert werden kann.)
const FOO; // SyntaxError: Missing initializer in const declarationDieconst-Deklaration erstellt einen unveränderlichen Verweis auf einen Wert. Das bedeutetnicht, dass der von ihr gehaltene Wert unveränderlich ist – lediglich, dass der Variablenbezeichner nicht neu zugewiesen werden kann. Im Falle eines Objekts bedeutet dies beispielsweise, dass der Inhalt des Objekts (z.B. seine Eigenschaften) verändert werden kann. Sie solltenconst-Deklarationen verstehen als "erstellen Sie eine Variable, derenIdentität konstant bleibt", nicht "derenWert konstant bleibt" — oder, "erstellen Sie unveränderlicheBindungen", nicht "unveränderliche Werte".
Viele Stilrichtlinien (einschließlich derMDN-Richtlinien) empfehlen die Verwendung vonconst anstelle vonlet, wann immer eine Variable in ihrem Gültigkeitsbereich nicht neu zugewiesen wird. Dies macht die Absicht deutlich, dass sich der Typ einer Variablen (oder der Wert, im Fall eines primitiven Werts) niemals ändern kann. Andere bevorzugen möglicherweiselet für Nicht-Primitive, die mutiert werden.
Die Liste, die demconst-Schlüsselwort folgt, wird alsBindungsliste bezeichnet und ist durch Kommas getrennt, wobei die KommaskeineKomma-Operatoren sind und die=-ZeichenkeineZuweisungsoperatoren 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 Kleinschreibung deklariert werden, aber eine häufige Konvention ist die Verwendung von reinen Großbuchstaben, insbesondere für primitive Werte, da diese wirklich unveränderlich sind.
// define MY_FAV as a constant and give it the value 7const MY_FAV = 7;console.log(`my favorite number is: ${MY_FAV}`);// Re-assigning to a constant variable throws an errorMY_FAV = 20; // TypeError: Assignment to constant variable// Redeclaring a constant throws an errorconst MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declaredvar MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declaredlet MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declaredBlock-Skopierung
Es ist wichtig, die Natur der Block-Skopierung 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); // 7const in Objekten und Arrays
const funktioniert auch bei Objekten und Arrays. Ein Versuch, das Objekt zu überschreiben, wirft einen Fehler "Assignment to constant variable".
const MY_OBJECT = { key: "value" };MY_OBJECT = { OTHER_KEY: "value" };Jedoch sind Objekt-Schlüssel nicht geschützt, daher wird die folgende Anweisung ohne Probleme ausgeführt.
MY_OBJECT.key = "otherValue";Sie müsstenObject.freeze() verwenden, um ein Objekt unveränderlich zu machen.
Dasselbe gilt für Arrays. Die Zuweisung eines neuen Arrays zur Variable wirft einen Fehler "Assignment to constant variable".
const MY_ARRAY = [];MY_ARRAY = ["B"];Dennoch ist es möglich, Elemente in das Array zu schieben und es somit zu verändern.
MY_ARRAY.push("A"); // ["A"]Deklaration mit Destructuring
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 sieheDestructuring.
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-let-and-const-declarations> |