const

Zusammenfassung

Die const-Deklaration erstellt eine Konstante. Wie bei der Deklaration einer Variablen mit let 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 gültige Bezeichner sein.
wertN
Wert der Konstanten. Dieser kann jeder gültige Ausdruck sein, einschließlich einer Funktion.

Beschreibung

Die const-Deklaration erstellt eine Konstante, die entweder global sichtbar oder nur lokal in dem Anweisungsblock, in der sie deklariert wird, sichtbar ist.

Die Konstante muss bei ihrer Definition mit einem Wert belegt werden. Eine spätere Zuweisung ist logischerweise nicht möglich, denn Sinn einer Konstanten ist, dass nach ihrer Definition keine Änderungen mehr vorgenommen werden können.

Die const-Deklaration erzeugt eine nicht veränderbare Referenz auf einen Wert. Dies bedeutet aber nicht, dass dieser Wert an sich unveränderlich ist, sondern nur, dass der Konstanten kein anderer Wert zugewiesen werden kann. Ist der Wert einer Konstanten zum Beispiel ein Objekt vom Typ Array, können dessen Einträge durchaus verändert werden. Die Beispiele unten verdeutlichen dies.

Eine Konstante kann nicht den gleichen Namen einer Funktion oder einer Variablen im gleichen Gültigkeitsbereich führen. Der Versuch, den Namen einer Konstanten nochmals zu verwenden, führt ebenso zu einem Fehler wie der Versuch, den Namen eines bestehenden Objektes für eine Konstante zu verwenden.

Für const gelten die gleichen Regel hinsichtlich der toten Zone wie für let. Auch Konstanten sind erst nach ihrer Deklaration verfügbar, nicht jedoch zwischen dem Beginn des Blocks und der Deklaration.
Dies ist ein Unterschied zur Variablendeklaration mit var. Mit var deklarierte Variablen sind in der gesamten Funktion verfügbar, in der sie deklariert wurden, selbst falls die Variablendeklaration die letzte Anweisung der Funktion war.

Beispiele

Die nachfolgenden Beispiele bauen aufeinander auf und sollten funktionell als ein Skript betrachtet werden. Sie sind lediglich in mehrere Absätze aufgeteilt, um die Teilaspekte der Konstantenbenutzung abzugrenzen.

Grundlagen

Konstanten müssen bei Deklaration mit einem Wert belegt werden und sind danach nicht mehr änderbar.

// 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;

// Konstanten benötigten einen Initialwert, weshalb hier ein SyntaxError
// erzeugt wird.
const FOO;

// Konstanten sind erst nach ihrer Deklaration verfügbar, 
// anders als var-Variablen.
console.log("konstante = " + KONST); // Fehler, KONST existiert noch nicht
console.log("variable = " + VAR); // VAR hingegen schon
const KONST = "23";
var VAR = "32";
console.log("konstante = " + KONST); // KONST existiert erst jetzt

Der Block als Gültigkeitsbereich

Konstanten sind nur innerhalb des Blocks aus geschweiften Klammern sichtbar, in dem sie deklariert wurden.

// MY_FAV, in vorigem Beispiel erstellt, ist immer noch 7
if (MY_FAV === 7) {
    // Innerhalb dieses if-Blocks kann eine neue Konstante MY_FAV 
    // erzeugt werden, die nur für diesen Block gültig ist.
    const MY_FAV = 20;

    // MY_FAV ist nun 20
    console.log("my favorite number is " + MY_FAV);

    // var-Variablen werden hingegen immer in den übergeordneten
    // Funktions- oder den globalen Kontext eingebettet, weshalb
    // dies zu einer Kollision mit der globalen Konstante MY_FAV
    // aus vorigem Beispiel führen wird:
    var MY_FAV = 20;
}
// MY_FAV ist immer noch 7, denn wir haben den if-Block verlassen.
console.log("my favorite number is " + MY_FAV);

Die Konstante und der Wert einer Konstante

Obwohl Konstanten selbst nicht geändert werden können, kann sich der Wert des Objektes, auf das die Konstante verweist, ändern.

// Konstanten können auch komplexe 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.
// Die folgende Anweisung wird ohne Probleme ausgeführt.
MY_OBJECT.key = "otherValue"; 

// Das Gleiche gilt für Felder:
const MY_ARRAY = [];
// Es ist möglich, neue Einträge an das Feld anzufügen.
MY_ARRAY.push("A"); // ["A"]
// Jedoch führt der Versuch, der Konstanten ein anderes Feld 
// zuzuweisen, zu einem 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

Erste Definition.

ECMAScript (ECMA-262)
Die Definition von 'Let and Const Declarations' in dieser Spezifikation.
Lebender Standard

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidFirefox für AndroidOpera für AndroidSafari auf iOSSamsung InternetNode.js
constChrome Vollständige Unterstützung 21Edge Vollständige Unterstützung 12Firefox Vollständige Unterstützung 36
Hinweise
Vollständige Unterstützung 36
Hinweise
Hinweise Prior to Firefox 13, const is implemented, but re-assignment is not failing.
Hinweise Prior to Firefox 46, a TypeError was thrown on redeclaration instead of a SyntaxError.
IE Vollständige Unterstützung 11Opera Vollständige Unterstützung 9Safari Vollständige Unterstützung 5.1WebView Android Vollständige Unterstützung ≤37Chrome Android Vollständige Unterstützung 25Firefox Android Vollständige Unterstützung 36
Hinweise
Vollständige Unterstützung 36
Hinweise
Hinweise Prior to Firefox 13, const is implemented, but re-assignment is not failing.
Hinweise Prior to Firefox 46, a TypeError was thrown on redeclaration instead of a SyntaxError.
Opera Android Vollständige Unterstützung 10.1Safari iOS Vollständige Unterstützung 6Samsung Internet Android Vollständige Unterstützung 1.5nodejs Vollständige Unterstützung 6.0.0

Legende

Vollständige Unterstützung  
Vollständige Unterstützung
Siehe Implementierungshinweise.
Siehe Implementierungshinweise.

Siehe auch