const
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die const-Deklaration deklariert blockweite lokale Variablen. Der Wert einer Konstante kann mit dem Zuweisungsoperator nicht durch Neuzuweisung 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 muss ein gültiger JavaScript-Bezeichner oder ein Destructuring-Bindungsmuster sein.
valueN-
Anfangswert der Variablen. Es kann ein beliebiger gültiger Ausdruck sein.
Beschreibung
Die const-Deklaration ist der let-Deklaration sehr ähnlich:
-
const-Deklarationen sind in Blöcken sowie in Funktionen eingeschränkt. -
const-Deklarationen können erst nach der Deklarationsstelle aufgerufen werden (siehe temporal dead zone). Aus diesem Grund werdenconst-Deklarationen häufig als nicht-gehoistet angesehen. -
const-Deklarationen erstellen keine Eigenschaften anglobalThis, wenn sie auf der obersten Ebene eines Skripts deklariert werden. -
const-Deklarationen können nicht durch eine andere Deklaration im selben Umfang neu deklariert werden. -
constbeginnt Deklarationen, keine Anweisungen. Das bedeutet, dass Sie eine einzelneconst-Deklaration nicht als Blockkörper 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 der gleichen Deklaration angeben. (Dies ist sinnvoll, da er später nicht geändert werden kann.)
const FOO; // SyntaxError: Missing initializer in const declaration
Die const-Deklaration erzeugt eine unveränderliche Referenz auf einen Wert. Es bedeutet nicht, dass der gehaltene Wert unveränderlich ist — nur dass der Variablenbezeichner nicht neu zugewiesen werden kann. Wenn der Inhalt zum Beispiel 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 "eine Variable erstellen, deren Identität konstant bleibt", nicht "deren Wert konstant bleibt" — oder, "unveränderliche Bindings erstellen", nicht "unveränderliche Werte".
Viele Stilrichtlinien (einschließlich der von MDN) empfehlen die Verwendung von const gegenüber let, wann immer eine Variable in ihrem Umfang nicht neu zugewiesen wird. Dies macht die Absicht klar, dass der Typ (oder Wert, im Falle eines primitiven Wertes) einer Variable sich niemals ändern kann. Andere bevorzugen möglicherweise let für Nicht-Primitiva, die mutiert werden.
Die Liste, die dem const-Schlüsselwort folgt, wird Bindingsliste genannt und ist durch Kommata getrennt, wobei die Kommata keine Kommaoperatoren und die =-Zeichen keine Zuweisungsoperatoren sind. Initialisierer von späteren Variablen können sich in der Liste auf frühere Variablen beziehen.
Beispiele
>Grundlegende Verwendung von const
Konstanten können mit Groß- oder Kleinbuchstaben deklariert werden, aber eine übliche Konvention ist die Verwendung von ausschließlich Großbuchstaben, insbesondere für Primitive, da diese 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-Scope
Es ist wichtig, die Natur des Block-Scopings 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 "Assignment to constant variable".
const MY_OBJECT = { key: "value" };
MY_OBJECT = { OTHER_KEY: "value" };
Allerdings sind Objektschlüssel nicht geschützt, daher wird die folgende Anweisung ohne Probleme ausgeführt.
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 Variable führt zu einem Fehler "Assignment to constant variable".
const MY_ARRAY = [];
MY_ARRAY = ["B"];
Dennoch ist es möglich, Elemente in das Array zu pushen und es damit zu verändern.
MY_ARRAY.push("A"); // ["A"]
Deklaration mit Destructuring
Die linke Seite jedes = kann auch ein Bindungsmuster sein. Dies ermöglicht die Erstellung 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 Destructuring.
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-let-and-const-declarations> |