Frage Gibt es Konstanten in JavaScript?


Gibt es eine Möglichkeit, Konstanten in JavaScript zu verwenden?

Wenn nicht, was ist die übliche Praxis für die Angabe von Variablen, die als Konstanten verwendet werden?


1061
2017-09-24 22:45


Ursprung


Antworten:


Schon seit ES2015JavaScript hat eine Vorstellung von const:

const MY_CONSTANT = "some-value";

Das wird funktionieren so ziemlich alle Browser außer IE 8, 9 und 10. Einige können auch brauchen strikter Modus aktiviert.

Sie können verwenden var mit Konventionen wie ALL_CAPS, um zu zeigen, dass bestimmte Werte nicht geändert werden sollten, wenn Sie ältere Browser unterstützen müssen oder mit altem Code arbeiten:

var MY_CONSTANT = "some-value";

965
2017-09-24 22:46



Versuchen Sie, die Variablen vor Änderungen zu schützen? Wenn ja, dann können Sie ein Modulmuster verwenden:

var CONFIG = (function() {
     var private = {
         'MY_CONST': '1',
         'ANOTHER_CONST': '2'
     };

     return {
        get: function(name) { return private[name]; }
    };
})();

alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.MY_CONST = '2';
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.private.MY_CONST = '2';                 // error
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

Bei diesem Ansatz können die Werte nicht geändert werden. Aber Sie müssen die Methode get () bei CONFIG :( verwenden.

Wenn Sie den Variablenwert nicht strikt schützen müssen, tun Sie einfach wie vorgeschlagen und verwenden Sie die Konvention ALL CAPS.


304
2017-09-25 03:14



Das const Stichwort ist in der ECMAScript 6-Entwurf aber bis jetzt genießt es nur ein wenig an Browser-Unterstützung: http://kangax.github.io/compat-table/es6/. Die Syntax lautet:

const CONSTANT_NAME = 0;

118
2018-03-26 20:29



IE unterstützt Konstanten, wie z.

<script language="VBScript">
 Const IE_CONST = True
</script>
<script type="text/javascript">
 if (typeof TEST_CONST == 'undefined') {
    const IE_CONST = false;
 }
 alert(IE_CONST);
</script>

63
2017-10-26 19:22



"use strict";

var constants = Object.freeze({
    "π": 3.141592653589793 ,
    "e": 2.718281828459045 ,
    "i": Math.sqrt(-1)
});

constants.π;        // -> 3.141592653589793
constants.π = 3;    // -> TypeError: Cannot assign to read only property 'π' …
constants.π;        // -> 3.141592653589793

delete constants.π; // -> TypeError: Unable to delete property.
constants.π;        // -> 3.141592653589793

Sehen Objekt.Freeze. Sie können benutzen const wenn du das machen willst constants Referenz auch schreibgeschützt.


63
2018-05-04 23:58



ECMAScript 5 führt ein Object.defineProperty:

Object.defineProperty (window,'CONSTANT',{ value : 5, writable: false });

Es ist unterstützt in jedem modernen Browser (sowie IE ≥ 9).

Siehe auch: Object.defineProperty in ES5?


56
2018-01-09 00:41



Nein, nicht allgemein. Firefox implementiert const aber ich weiß IE nicht.


@John weist auf eine gängige Benennungspraxis für in anderen Sprachen seit Jahren verwendete Konsten hin, sehe ich keinen Grund, warum Sie das nicht verwenden könnten. Das bedeutet natürlich nicht, dass jemand den Variablenwert nicht überschreibt. :)


23
2017-09-24 22:45



Mozillas MDN-Webdokumente enthalten gute Beispiele und Erläuterungen zu const. Auszug:

// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;

// this will throw an error - Uncaught TypeError: Assignment to constant variable.
MY_FAV = 20;

Aber es ist traurig, dass IE9 / 10 immer noch nicht unterstützt const. Und der Grund dafür ist absurd:

Also, was macht IE9 mit const? Damit   Bis jetzt war unsere Entscheidung nicht   unterstütze es. Es ist noch kein Konsens   Feature, wie es noch nie verfügbar war   in allen Browsern.

...

Am Ende scheint es das Beste zu sein   langfristige Lösung für das Web ist zu   lass es aus und warte darauf   Standardisierungsprozesse zu laufen   Kurs.

Sie implementieren es nicht, weil andere Browser es nicht korrekt implementiert haben ?! Zu viel Angst davor, es besser zu machen? Standarddefinitionen oder nicht, eine Konstante ist eine Konstante: einmal gesetzt, nie geändert.

Und zu all den Ideen: Jede Funktion kann überschrieben werden (XSS etc.). Also gibt es keinen Unterschied in var oder function(){return}. const ist die einzige wirkliche Konstante.

Aktualisieren: IE11 unterstützt  const:

IE11 enthält Unterstützung für die wohldefinierten und häufig verwendeten Funktionen des aufkommenden ECMAScript 6-Standards einschließlich const, Map, Set, und WeakMap, ebenso gut wie __proto__ für verbesserte Interoperabilität.


19
2018-04-30 09:57