Konstanten in Javascript

Eigentlich ist es keine Überraschung, wenn eine Programmiersprache Konstanten unterstützt. Bei Javascript bin ich zuvor aber nie darüber gestolpert: const.

Chrome- und Firefox-Verhalten nicht konstant

Ich habe mal einen kleinen Test in Chrome und Firefox gemacht. Im Normalfall verhalten sich beide, wie man es erwartet. Versucht man jedoch nachträglich eine Variable in eine Konstante zu verwandeln, reagieren die beiden unterschiedlich: Chrome ignoriert das „const“ und setzt den neuen Wert, während Firefox einen Fehler meldet und den neuen Wert ignoriert. Zumindest bleibt in beiden Fällen eine Variable variabel.

const a = 1;
a = 2;
console.log(a); // 1

const b = { b : 2 };
b = 3;
console.log(b); // Object { b=2}

var c = 3;
const c = 4; // Chrome: okay / FF: "TypeError: redeclaration of var c"
console.log(c); // Chrome: 4 / FF: 3
c = 5;
console.log(c); // 5

Scoping wie bei var

Bei der Sichtbarkeit verhält sich const genau wie var: Konstanten sind innerhalb von Funktionen beliebig tief sichtbar, außerhalb jedoch nicht.

(function() { const c1 = 1; console.log(c1); }()); // 1
console.log(c1); // ReferenceError: c1 is not defined

Ohne Scope werden Konstanten wie auch Variablen eine Eigenschaft des aktuellen Windows:

const c2 = 2;
console.log(window.c2); // 2

8 Kommentare

  1. Was ich meine: Konstanten sind ja bereits implementiert. Folglich muss const doch auch ein reserviertes Wort sein, oder nicht? Wäre sonst bestimmt schwierig rauszufinden, ob ein const nun eine Variable oder das Sprachfeature ist…

  2. The current implementation of const is a Mozilla-specific extension and is not part of ECMAScript 5. It is supported in Firefox & Chrome (V8) and partially supported in Opera 9+ and Safari. It is not supported in Internet Explorer 6-9, or in the preview of Internet Explorer 10. The const keyword currently declares the constant in the function scope (like variables declared with var).

    const is going to be defined by ECMAScript 6, but with different semantics. Similar to variables declared with the let statement, constants declared with const will be block-scoped.

  3. Aber ich verstehe nicht, worauf du hinaus willst. Meinst du, dass die da so ein Herstellerprefix verwenden sollten? -moz-const und so?

    Jedenfalls voll irritierend, jetzt hintenrum noch Block-Scopes in JS einzuführen. Da hat man sich gerade so schön an den Funktionsmissbrauch gewöhnt…

  4. Ich wollte damit nur sagen, dass es noch viele andere reservierte Wörter gibt, die aber teilweise noch gar keine Bedeutung/Verwendung haben…

  5. Mit „Gehört das nicht zu den reservierten Wörtern… ?” meinst du, „dass es noch viele andere reservierte Wörter gibt, die aber teilweise noch gar keine Bedeutung/Verwendung haben…“? Ich geb’s auf 😉

Kommentare sind geschlossen.