This is a new technology, part of the ECMAScript 2015 (ES6) standard.
This technology's specification has been finalized, but check the compatibility table for usage and implementation status in various browsers.
Zusammenfassung
Die const-Deklaration erstellt eine Konstante. Gleich wie bei der let-Deklaration ist der Gültigkeitsbereich auf den lokalen Block begrenzt. Der Wert einer Konstanten kann nicht verändert werden durch Zuweisung oder Neudeklaration.
Syntax
const name1 = wert1 [, name2 = wert2 [, ... [, nameN = wertN]]];
nameN- Name der Konstanten. Dieser kann jeder legale Bezeichner sein.
wertN- Wert der Konstanten. Dieser kann jeder legale Ausdruck sein.
Beschreibung
Die const Deklaration erstellt eine Konstante, die global oder lokal in der Funktion, in der sie deklariert wird, verfügbar ist. Ein Initialisierungswert für die Konstante ist zwingend.
Die const Deklaration erzeugt eine nicht veränderbare Referenz auf einen Wert. Dies bedeutet aber nicht, dass dieser Wert an sich unverärderlich ist, sondern nur, dass der Konstanten kein anderer Wert zugewiesen werden kann. Wenn der Wert einer Konstante z. B. ein Array ist, können dessen Einträge durchaus verändert werden. Die Beispiele unten verdeutlichen dies.
Alles was bei der let Deklaration betreffend "Zeitweilig tote Zonen" gesagt wurde, gilt ebenfalls für const.
Eine Konstante kann sich den Namen nicht mit einer Funktion oder Variablen im gleichen Gültigkeitsbereich teilen.
Beispiel
Das folgende Beispiel zeigt, wie Konstanten funktionieren. Probieren Sie es in Ihrer Browser-Konsole aus.
// HINWEIS: Konstanten können sowohl mit Klein- wie auch Grossbuchstaben deklariert
// werden. Üblicherweise verwendet man aber Namen mit alles Grossbuchstaben.
// Definiert my_fav als eine Konstante und weist ihr den Wert 7 zu.
const MY_FAV = 7;
// Ein Versuch, der Konstanten einen anderen Wert zuzuweisen, ergibt
// einen Fehler.
MY_FAV = 20;
// Schreibt 7 auf die Konsole.
console.log("my favorite number is: " + MY_FAV);
// Der Versuch, eine existierende Konstante neu zu definieren,
// erzeugt einen Fehler
const MY_FAV = 20;
// Der Name my_fav ist für die obige Konstante reserviert, weshalb
// dieses ebenfalls einen Fehler erzeugt.
var MY_FAV = 20;
// Auch dies ergibt einen Fehler.
let MY_FAV = 20;
// Man beachte, dass const Deklarationen auf Blöcke begrenzt sind.
if (MY_FAV === 7) {
// Dies funktioniert und erzeugt eine neue Konstante MY_FAV innerhalb
// des aktuellen Blocks. (Es liesse sich auch mit let eine Variable deklarieren.)
const MY_FAV = 20;
// MY_FAV ist nun 20
console.log("my favorite number is " + MY_FAV);
// Diese Variable hingegen wird in den globalen Kontext gehoisted und ergibt eine Fehler
var MY_FAV = 20;
}
// MY_FAV ist immer noch 7
console.log("my favorite number is " + MY_FAV);
// Konstanten benötigten einen Initialwert, weshalb hier ein SyntaxError
// erzeugt wird.
const FOO;
// Konstanten können auch Objekte sein.
const MY_OBJECT = {"key": "value"};
// Ein Versuch, der Konstanten ein anderes Objekt zuzuweisen, ergibt
// einen Fehler.
MY_OBJECT = {"OTHER_KEY": "value"};
// Das Objekt selber hingegen ist nicht vor Veränderungen geschützt.
// Das folgende Statement wird ohne Probleme ausgeführt.
MY_OBJECT.key = "otherValue"; // Verwerde Object.freeze() um ein Objekt unveränderbar zu machen
// Das Gleiche gilt für Arrays
const MY_ARRAY = [];
// Es ist möglich, neue Einträge an das array anzufügen.
MY_ARRAY.push("A"); // ["A"]
// Jedoch der Versuch, der Konstanten ein anderes Array zuzuweisen,
// ergibt einen Fehler.
MY_ARRAY = ["B"]
Spezifikationen
| Spezifikation | Status | Kommentar | |
|---|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Let and Const Declarations' in dieser Spezifikation. |
Standard |
Initial definition. |
|
| ECMAScript Latest Draft (ECMA-262) Die Definition von 'Let and Const Declarations' in dieser Spezifikation. |
Entwurf |
Browserkompatibilität
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| Basisfunktionalität | 21 | (Ja) | ? | 11 | 12 | 5.1 |
|
Fehlschlagen beim |
20 | (Ja) | 13 (13) | 11 | ? | ? |
| Allowed in sloppy mode | 49.0 |
| Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| Basisfunktionalität | Nicht unterstützt | (Ja) | ? | ? | (Ja) | ? | (Ja) |
|
Fehlschlagen beim |
Nicht unterstützt | (Ja) | ? | ? | (Ja) | 10.0 | (Ja) |
| Allowed in sloppy mode | Nicht unterstützt | 49.0 | 49.0 |
Anmerkungen
In frühen Versionen von Firefox und Chrome und seit Safari 5.1.7 und Opera 12.00 kann der Wert einer Konstanten nachträglich geändert werden. Konstanten sind im Internet Explorer 6-10 nicht unterstützt, jedoch wurden sie in Version 11 eingeführt.
Firefox-spezifische Anmerkungen
- Vor Gecko 46 (Firefox 46 / Thunderbird 46 / SeaMonkey 2.43) wurde ein
TypeErroranstatt einSyntaxErrorerzeugt beim Versuch eine Konstante neu zu deklarieren (Bug 1198833). - Begonnen mit Gecko 36 (Firefox 36 / Thunderbird 36 / SeaMonkey 2.33):
{const a=1};erzeugt jetzt einenReferenceErrorund gibt nicht mehr 1 wegen des Blockgültigkeitsbereiches zurück.const a;erzeugt jetzt einenSyntaxError("missing = in const declaration"): Eine Initialisierung wird benötigt.const a = 1; a = 2;erzeugt jetzt einenSyntaxError("invalid assignment to const a").