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 deren Eigenschaften hinzugefügt, aktualisiert oder entfernt werden.
Probieren Sie es aus
Syntax
const name1 = value1;
const name1 = value1, name2 = value2;
const name1 = value1, name2 = value2, /* …, */ nameN = valueN;
nameN
-
Der Name der zu deklarierenden Variable. Jeder muss ein legaler JavaScript-Bezeichner oder ein Destructuring-Bindungsmuster sein.
valueN
-
Anfangswert der Variablen. Es kann jeder legale Ausdruck sein.
Beschreibung
Die const
-Deklaration ist sehr ähnlich zu let
:
-
const
-Deklarationen sind sowohl auf Blöcke als auch auf Funktionen eingeschränkt. -
const
-Deklarationen können nur nach dem Ort der Deklaration erreicht werden (siehe temporale Totzone). Aus diesem Grund werdenconst
-Deklarationen allgemein als nicht gehoben betrachtet. -
const
-Deklarationen erstellen keine Eigenschaften aufglobalThis
, wenn sie auf der obersten Ebene eines Skripts deklariert werden. -
const
-Deklarationen können nicht durch eine andere Deklaration im gleichen Bereich neu deklariert werden. -
const
beginnt Deklarationen, nicht Anweisungen. Das bedeutet, dass Sie keineconst
-Deklaration allein als Blockkörper 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 ihren Wert in derselben Deklaration angeben. (Das macht Sinn, da er später nicht geändert werden kann.)
const FOO; // SyntaxError: Missing initializer in const declaration
Die const
-Deklaration erstellt eine unveränderliche Referenz auf einen Wert. Das bedeutet nicht, dass der gehaltene Wert unveränderlich ist — nur, dass der Variablenbezeichner nicht neu zugewiesen werden kann. Wenn der Inhalt ein Objekt ist, bedeutet dies zum Beispiel, dass der Inhalt des Objekts (z.B. seine Eigenschaften) verändert werden kann. Sie sollten const
-Deklarationen als "erstellen Sie eine Variable, deren Identität konstant bleibt", nicht "deren Wert konstant bleibt" verstehen — oder "erstellen Sie unveränderliche Bindungen", nicht "unveränderliche Werte".
Viele Stilrichtlinien (einschließlich MDN's) empfehlen die Verwendung von const
über let
, wann immer eine Variable in ihrem Bereich nicht neu zugewiesen wird. Dies macht die Absicht klar, dass sich der Typ (oder Wert im Fall eines primitiven Werts) einer Variablen niemals ändern kann. Andere ziehen let
für nicht-primitives vor, die verändert werden.
Die Liste, die dem const
-Schlüsselwort folgt, wird als Bindungsliste bezeichnet und durch Kommas getrennt, wobei die Kommas keine Kommaoperatoren sind und die =
-Zeichen keine Zuweisungsoperatoren sind. Initialisierer späterer 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 Großbuchstaben, insbesondere für primitive Datentypen, 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-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); // 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" };
Objektschlüssel sind jedoch 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. Ein neues Array der Variablen zuzuweisen, führt zu einem Fehler "Assignment to constant variable".
const MY_ARRAY = [];
MY_ARRAY = ["B"];
Es ist jedoch möglich, Elemente in das Array zu pushen und es so zu verändern.
MY_ARRAY.push("A"); // ["A"]
Deklaration mit Destrukturierung
Die linke Seite jedes =
kann auch ein Bindungsmuster sein. Dies ermöglicht es, mehrere Variablen auf einmal zu erstellen.
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 Destrukturierende Zuweisung.
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-let-and-const-declarations |
Browser-Kompatibilität
BCD tables only load in the browser