Comment déclarer les constantes de chaîne dans JavaScript? [dupliquer]

cette question a déjà une réponse ici:

je veux déclarer les constantes de chaîne en JavaScript.

y a-t-il un moyen de le faire?

88
demandé sur alex 2011-04-26 08:46:57

11 réponses

beaucoup d'implémentations de navigateurs (et de noeuds) ont des constantes, utilisées avec const .

const SOME_VALUE = "Your string";

ce const signifie que vous ne pouvez pas le réassigner à une autre valeur.

cochez la case notes de compatibilité pour voir si vos navigateurs ciblés sont pris en charge.

vous pouvez aussi modifier le premier exemple en utilisant defineProperty() ou ses amis et faire le writable bien false . Cela signifie que la variable ne peut pas être changé, comme une constante.

113
répondu alex 2016-04-08 07:24:39

il n'y a pas de constantes dans JavaScript, mais pour déclarer un littéral tout ce que vous avez à faire est:

var myString = "Hello World";

Je ne suis pas sûr de ce que vous voulez dire par les stocker dans un fichier ressource; ce n'est pas un concept JavaScript.

8
répondu Esteban Araya 2015-06-22 04:03:04

utilisez-vous JQuery? Voulez-vous utiliser les constantes dans plusieurs fichiers javascript? Alors lisez la suite. (C'est ma réponse pour une JQuery question)

il existe une méthode jQuery très pratique appelée 'getScript'. Assurez-vous d'utiliser le même chemin relatif que si vous accédiez au fichier à partir de vos fichiers html/jsp/etc (c.-à-d. que le chemin N'est pas relatif à l'endroit où vous placez la méthode getScript, mais plutôt relatif à votre chemin de domaine). Par exemple, pour une application à localhost: 8080 / myDomain:

$(document).ready(function() {
  $.getScript('/myDomain/myScriptsDir/constants.js');
  ...

alors, si vous avez ceci dans un fichier appelé constantes.js:

var jsEnum = { //not really an enum, just an object that serves a similar purpose
  FOO : "foofoo",
  BAR : "barbar",
}

vous pouvez maintenant imprimer "foofoo" avec

jsEnum.FOO
5
répondu MattC 2014-01-13 23:56:53

bien sûr, ce N'était pas une option lorsque L'OP a soumis la question, mais ECMAScript 6 permet maintenant aussi les constantes par le biais du mot-clé "const":

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

vous pouvez voir ECMAScript 6 adoption ici .

4
répondu Simon 2015-06-26 16:58:14

Eh bien, vous pouvez le faire comme ça:

(function() {
    var localByaka;
    Object.defineProperty(window, 'Byaka', {
        get: function() {
            return localByaka;
        },
        set: function(val) {
            localByaka = window.Byaka || val;
        }
    });
}());
window.Byaka = "foo"; //set constant
window.Byaka = "bar"; // try resetting it for shits and giggles
window.Byaka; // will allways return foo!

si vous faites ceci comme ci-dessus dans la portée globale ce sera une vraie constante, parce que vous ne pouvez pas écraser l'objet window.

j'ai créé une bibliothèque pour créer des constantes et des objets immuables en javascript. Sa version 0.2 mais il fait le tour bien. http://beckafly.github.io/insulatejs

2
répondu Beckafly 2014-11-19 23:29:27

fonction de gel Standard de l'objet incorporé peut être utilisé pour geler un objet contenant des constantes.

var obj = {
    constant_1 : 'value_1'
};
Object.freeze(obj);
obj.constant_1 = 'value_2';   //Silently does nothing
obj.constant_2 = 'value_3';   //Silently does nothing

en mode strict, le réglage des valeurs sur l'objet immuable lance TypeError. Pour en savoir plus, lisez . https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

2
répondu Mohit 2014-12-22 07:32:59

Starting ECMAScript 2015(A. K. a ES6) , vous pouvez utiliser const

const constantString = 'Hello';

mais ce n'est pas encore le cas de tous les navigateurs/serveurs. Pour cela, utilisez une bibliothèque en polyfill comme Babel.

2
répondu Ryan Rho 2015-09-08 08:46:26

il y a tellement de façons de dépecer ce chat. Vous pouvez le faire dans une clôture. Ce code vous donnera une façon d'avoir des constantes en lecture seule et en namespace. Il suffit de les déclarer dans la zone publique .

//Namespaced Constants
var MyAppName;
//MyAppName Namespace
(function (MyAppName) {
    //MyAppName.Constants Namespace
    (function (Constants) {
        //Private
        function createConstant(name, val) {
            Object.defineProperty(MyAppName.Constants, name, {
                value: val,
                writable: false
            });
        }

        //Public
        Constants.FOO = createConstant("FOO", 1);
        Constants.FOO2 = createConstant("FOO2", 1);

        MyAppName.Constants = Constants;
    })(MyAppName.Constants || (MyAppName.Constants = {}));
})(MyAppName || (MyAppName = {}));

Utilisation:

console.log(MyAppName.Constants.FOO);       //prints 1
MyAppName.Constants.FOO = 2;
console.log(MyAppName.Constants.FOO);       //does not change - still prints 1
0
répondu Simon 2014-10-03 17:24:24

utilise un espace de noms global ou un objet global comme des constantes.

var Constants = {};

et en utilisant la fonction d'écriture de defineObject qui ajoutera toutes les propriétés à cet objet et lui assignera de la valeur.

function createConstant (prop, value) {
    Object.defineProperty(Constants , prop, {
      value: value,
      writable: false
   });
};
0
répondu Sandip Nirmal 2015-09-09 09:23:05

vous pouvez utiliser la méthode de gel de L'objet pour créer une constante. Par exemple:

var configObj ={timeOut :36000};
Object.freeze(configObj);

de cette façon, vous ne pouvez pas modifier la configObj.

-1
répondu Rubi saini 2015-08-01 18:52:00

il suffit de déclarer variable en dehors de la portée de toute fonction js. Ces variables seront globales.

-4
répondu Lloyd 2011-04-26 04:49:14