1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
---
title: const
slug: Web/JavaScript/Reference/Statements/const
tags:
- ECMAScript 2015
- JavaScript
- Statement
translation_of: Web/JavaScript/Reference/Statements/const
---
<div>
<div>{{jsSidebar("Statements")}}</div>
</div>
<h2 id="Summary" name="Summary">Zusammenfassung</h2>
<p>Die<strong> </strong><strong><code>const</code>-</strong>Deklaration erstellt eine Konstante. Wie bei der Deklaration einer Variablen mit {{jsxref("Statements/let", "let")}} ist der Gültigkeitsbereich auf den lokalen Block begrenzt. Der Wert einer Konstanten kann nicht verändert werden durch Zuweisung oder Neudeklaration.</p>
<p>{{EmbedInteractiveExample("pages/js/statement-const.html")}}</p>
<h2 id="Syntax" name="Syntax">Syntax</h2>
<pre class="syntaxbox">const <em>name1 = wert<em>1 [</em>, <em>name2</em> = <em>wert2</em><em> [</em>, ... [</em>, <em>nameN</em> = <em>wertN]]]</em>;</pre>
<dl>
<dt><code>nameN</code></dt>
<dd>Name der Konstanten. Dieser kann jeder gültige {{Glossary("Identifier", "Bezeichner")}} sein.</dd>
<dt><code>wertN</code></dt>
<dd>Wert der Konstanten. Dieser kann jeder gültige {{Glossary("Expression", "Ausdruck")}} sein, einschließlich einer Funktion.</dd>
</dl>
<h2 id="Description" name="Description">Beschreibung</h2>
<p>Die <code><strong>const</strong></code>-Deklaration erstellt eine Konstante, die entweder global sichtbar oder nur lokal in dem {{jsxref("Statements/Block", "Anweisungsblock")}}, in der sie deklariert wird, sichtbar ist.</p>
<p>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.</p>
<p>Die <strong><code>const</code>-</strong>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 {{jsxref("Global_Objects/Array", "Array")}}, können dessen Einträge durchaus verändert werden. Die Beispiele unten verdeutlichen dies.</p>
<p>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.</p>
<p>Für const gelten die gleichen Regel hinsichtlich der <a href="https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/let#Zeitweilig_tote_Zonen_und_Fehler_mit_let">toten Zone</a> wie für {{jsxref("Statements/let", "let")}}. Auch Konstanten sind erst <em>nach</em> ihrer Deklaration verfügbar, nicht jedoch zwischen dem Beginn des Blocks und der Deklaration.<br>
Dies ist ein Unterschied zur Variablendeklaration mit {{jsxref("Statements/var", "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.</p>
<h2 id="Beispiele" name="Beispiele">Beispiele</h2>
<p>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.</p>
<h3 id="Grundlagen">Grundlagen</h3>
<p>Konstanten müssen bei Deklaration mit einem Wert belegt werden und sind danach nicht mehr änderbar.</p>
<pre class="brush: js">// 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
</pre>
<h3 id="Der_Block_als_Gültigkeitsbereich">Der Block als Gültigkeitsbereich</h3>
<p>Konstanten sind nur innerhalb des Blocks aus geschweiften Klammern sichtbar, in dem sie deklariert wurden.</p>
<pre class="brush: js">// 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);
</pre>
<h3 id="Die_Konstante_und_der_Wert_einer_Konstante">Die Konstante und der Wert einer Konstante</h3>
<p>Obwohl Konstanten selbst nicht geändert werden können, kann sich der Wert des Objektes, auf das die Konstante verweist, ändern.</p>
<pre class="brush: js">// 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"]</pre>
<h2 id="Spezifikationen">Spezifikationen</h2>
<table class="standard-table" style="height: 109px; width: 758px;">
<tbody>
<tr>
<th scope="col">Spezifikation</th>
<th scope="col">Status</th>
<th scope="col"></th>
<th scope="col">Kommentar</th>
</tr>
<tr>
<td>{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td>
<td>{{Spec2('ES2015')}}</td>
<td></td>
<td>
<p>Erste Definition.</p>
</td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Browserkompatibilität">Browserkompatibilität</h2>
<p>{{Compat("javascript.statements.const")}}</p>
<h2 id="See_also" name="See_also">Siehe auch</h2>
<ul>
<li>{{jsxref("Statements/var", "var")}}</li>
<li>{{jsxref("Statements/let", "let")}}</li>
<li><a href="/de-DE/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Constants">Konstanten in der JavaScript-Einführung</a></li>
</ul>
|