Gibt es eine Möglichkeit, Konstanten in zu verwenden? JavaScript?
Wenn nicht, was ist die gängige Praxis für die Angabe von Variablen, die als Konstanten verwendet werden?
fuentesjr
Gibt es eine Möglichkeit, Konstanten in zu verwenden? JavaScript?
Wenn nicht, was ist die gängige Praxis für die Angabe von Variablen, die als Konstanten verwendet werden?
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() auf CONFIG 🙁 verwenden.
Wenn Sie den Variablenwert nicht streng schützen müssen, tun Sie es einfach wie vorgeschlagen und verwenden Sie eine Konvention von ALLEN GROSSBUCHSTABEN.
CONFIG.get = someNewFunctionThatBreaksTheCode
… Alles in allem können Sie in JS absolut keine Konstanten erzwingen (ohne Schlüsselwort const). Das Einzige, was Sie tun können, ist die Sichtbarkeit einzuschränken.
– Thomas Eding
11. Januar 2010 um 23:20 Uhr
Das glaube ich private
ist ein zukünftiges reserviertes Wort in JavaScript, ich würde das an deiner Stelle nicht verwenden.
– Zaq
5. August 2012 um 16:49 Uhr
Sam
"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.einfrieren. Sie können verwenden const
wenn du das machen willst constants
Referenz auch schreibgeschützt.
Wenn Sie versuchen, a einen Wert zuzuweisen const
, es wirft keine Fehler. Die Zuweisung schlägt einfach fehl und die Konstante hat immer noch ihren ursprünglichen Wert. Dies ist meiner Meinung nach ein großer Designfehler, aber solange es eine klare, konsistente Namenskonvention gibt (wie das beliebte ALL_CAPS), denke ich nicht, dass es zu viel Kummer verursachen würde.
– Tyler
29. Juni 2010 um 21:54 Uhr
IE unterstützt Konstanten, Art von, zB:
<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>
Junge, sprich über etwas, das nicht Cross-Browser ist. . . Immer noch +1, um ein bisschen über den Tellerrand hinauszudenken.
– Tom
26. Oktober 2009 um 19:36 Uhr
VBScript? Was ist das? 😉
– tybro0103
27. September 2013 um 4:06 Uhr
Ich stimme normalerweise für allgemeine Fragen zu Cross-Browsern mit einer IE-spezifischen Antwort ab. Weil ich Leute hasse, die denken, dass die IE-Javascript-Implementierung “die Eine” ist und andere einfach ignoriert werden sollten. Wer benutzt übrigens andere Browser als IE?
– Ameise
2. Oktober 2013 um 20:54 Uhr
@Cooluhuru Dieses Skript scheint sowohl IE-Browser (mit VBScript) als auch Nicht-IE-Browser (mit JavaScript) zu verarbeiten const
). Können Sie erklären, was daran falsch ist?
– Andreas Grimm
13. Juli 2016 um 7:47 Uhr
Es fällt mir immer noch schwer zu akzeptieren, dass Konstanten geändert werden können.
– Norbert Norbertson
30. Januar 2018 um 15:46 Uhr
Sam
ECMAScript 5 führt ein Object.defineProperty
:
Object.defineProperty (window,'CONSTANT',{ value : 5, writable: false });
Es ist in jedem modernen Browser unterstützt (sowie IE ≥ 9).
Siehe auch: Object.defineProperty in ES5?
Junge, sprich über etwas, das nicht Cross-Browser ist. . . Immer noch +1, um ein bisschen über den Tellerrand hinauszudenken.
– Tom
26. Oktober 2009 um 19:36 Uhr
VBScript? Was ist das? 😉
– tybro0103
27. September 2013 um 4:06 Uhr
Ich stimme normalerweise für allgemeine Fragen zu Cross-Browsern mit einer IE-spezifischen Antwort ab. Weil ich Leute hasse, die denken, dass die IE-Javascript-Implementierung “die Eine” ist und andere einfach ignoriert werden sollten. Wer benutzt übrigens andere Browser als IE?
– Ameise
2. Oktober 2013 um 20:54 Uhr
@Cooluhuru Dieses Skript scheint sowohl IE-Browser (mit VBScript) als auch Nicht-IE-Browser (mit JavaScript) zu verarbeiten const
). Können Sie erklären, was daran falsch ist?
– Andreas Grimm
13. Juli 2016 um 7:47 Uhr
Es fällt mir immer noch schwer zu akzeptieren, dass Konstanten geändert werden können.
– Norbert Norbertson
30. Januar 2018 um 15:46 Uhr
Gemeinschaft
Nein, nicht generell. Firefox implementiert const
aber ich weiß, dass IE nicht.
@John auf eine gängige Benennungspraxis für consts hinweist, die seit Jahren in anderen Sprachen verwendet wird, sehe ich keinen Grund, warum Sie das nicht verwenden könnten. Das bedeutet natürlich nicht, dass jemand den Wert der Variablen nicht trotzdem überschreiben wird. 🙂
Wie jeder weiß, wenn IE es nicht implementiert, könnte es genauso gut nicht existieren.
– Josh Hinmann
24. September 2008 um 22:47 Uhr
Leider und praktisch gesehen – es ist wahr. IE besitzt einen großen Marktanteil. Wenn ich ein Unternehmen besäße und Webanwendungen intern verwenden würde, würde ich auf FF standardisieren. Ich weiß nicht, warum sich so viele Leute für IE interessieren, es bläst.
– Jason Bunting
24. September 2008 um 22:50 Uhr
@Rich: Wer hat gesagt, dass meine Meinung Tatsache ist? Sie haben eine ziemliche Annahme gemacht. Außerdem ist für mich die Tatsache, dass der IE scheiße ist, eine Tatsache. Du kannst deine eigenen Fakten haben, ich habe nicht gesagt, dass du meinen glauben musst. 😛 Nimm ein Xanax oder so…
– Jason Bunting
24. September 2008 um 23:44 Uhr
@Rich B, ja, das war nur ein dummer Kommentar, und vertrau mir, ich würde es wissen, ich mache viele dumme Kommentare. @Jason B. – interessant, ich bin letzte Nacht auf genau dieses Problem gestoßen. const hat in FF funktioniert, aber nicht in IE. Danke für die Klarstellung
– theman_on_vista
8. April 2009 um 13:14 Uhr
Wen interessiert der IE? Ich nicht! FF oder Chrome oder Opera usw. können auf fast jeder Betriebssystemplattform installiert werden. Auch Computerhändler wissen normalerweise, dass die alte IE-Version scheiße ist, also installieren sie oft (oder sogar jedes Mal) alternative Browser, bevor sie einen Computer verkaufen. Also habe ich entschieden, dass sich meine entwickelte App überhaupt nicht um inkompatible Browser kümmert: Wenn Browser-Entwickler sich um die Einhaltung von Standards kümmern, können ihre Produkte meine App verwenden, wenn nicht, werden Benutzer einen anderen Browser verwenden … Ich kann damit leben; -) Aber kann Microsoft damit leben, einen Teil des Marktes zu verlieren? Nein, das können sie nicht, also werden “Sie” ihre Entwicklerpolitik ändern!
– willy wonka
4. Januar 2017 um 8:04 Uhr
Derek: Würde Ihr Try/Catch nicht den Umfang dessen begrenzen, was Sie dem Try/Catch-Block deklarieren? Wenn Sie den Umfang nicht richtig festlegen, was ist der Sinn der Angabe
const
odervar
überhaupt?– Kodierer
26. März 2013 um 10:13 Uhr
@Coderer in den aktuellen Implementierungen wird dies funktionieren, da
const
hat den gleichen Umfang wievar
, und das ist Funktionsebene, nicht Blockebene. Wenn Sie stattdessen dem kommenden ECMAScript-Standard folgen,const
hat den gleichen Umfang wielet
was bedeutet, dass es nicht funktionieren wird.– Jaspis
22. Juli 2013 um 19:27 Uhr
@Coderer Falsche Sprache. Variablen in Javascript sind Funktionsumfang. Das ist nicht C.
– doug65536
11. September 2013 um 18:34 Uhr
@ Jasper Das ist bedauerlich. Ich habe meine Zweifel, dass sie tatsächlich den gesamten vorhandenen Code brechen, der const verwendet.
– doug65536
11. September 2013 um 18:36 Uhr
Ehrlich gesagt. Warum haben wir nicht
const var
undconst let
…– cwharris
8. Juli 2014 um 18:31 Uhr