web-dev-qa-db-fra.com

Comment déclarer des constantes de chaîne en JavaScript?

Je veux déclarer des constantes de chaîne en JavaScript.

Y a-t-il un moyen de faire ça?

93
Girish Chaudhari

Les implémentations (et les nœuds) de nombreux navigateurs ont des constantes, utilisées avec const .

const SOME_VALUE = "Your string";

Ceci const signifie que vous ne pouvez pas le réaffecter à une autre valeur.

Consultez le notes de compatibilité pour voir si vos navigateurs ciblés sont pris en charge.

Vous pouvez également modifier le premier exemple en utilisant defineProperty() ou ses amis et en créant la propriété writable, false. Cela signifie que le contenu de la variable ne peut pas être modifié, comme une constante.

123
alex

Il n'y a pas de constantes en JavaScript, mais pour déclarer un littéral, il suffit de:

var myString = "Hello World";

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

8
Esteban Araya

Utilisez-vous JQuery? Voulez-vous utiliser les constantes dans plusieurs fichiers javascript? Alors lisez la suite. (Ceci est ma réponse pour une question JQuery liée)

Il existe une méthode pratique jQuery appelée 'getScript'. Assurez-vous d’utiliser le même chemin relatif que celui que vous utiliseriez si vous accédiez au fichier à partir de vos fichiers html/jsp/etc (c’est-à-dire que le chemin n’est PAS relatif à l’endroit où vous avez placé la méthode getScript, mais plutôt au chemin de votre domaine). Par exemple, pour une application sur localhost: 8080/myDomain:

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

alors, si vous avez ceci dans un fichier appelé constants.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
MattC

Bien sûr, cela n’était pas une option lorsque le PO a soumis la question, mais ECMAScript 6 permet également les constantes au moyen du mot clé "const":

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

Vous pouvez voir l'adoption de ECMAScript 6 ici .

4
Simon

Eh bien, vous pouvez le faire comme suit:

(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 procédez comme ci-dessus dans l'étendue globale, ce sera une constante vraie, car 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. C'est toujours la version 0.2 mais ça fait bien l'affaire. http://beckafly.github.io/insulatejs

3
Beckafly

La fonction de gel standard de l’objet intégré peut être utilisée 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, la définition de valeurs sur un objet immuable lève TypeError. Pour plus de détails, voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

2
Mohit

A partir de ECMAScript 2015 (a.k.a ES6), vous pouvez utiliser const

const constantString = 'Hello';

Mais tous les navigateurs/serveurs ne le supportent pas encore. Afin de supporter cela, utilisez une bibliothèque polyfill comme Babel.

2
Ryan Rho

Tant de façons de peau ce chat. Vous pouvez le faire dans une fermeture. Ce code vous donnera un moyen en lecture seule et en espacement de noms d'avoir des constantes. Il suffit de les déclarer dans la zone Public.

//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 = {}));

Usage:

console.log(MyAppName.Constants.FOO);       //prints 1
MyAppName.Constants.FOO = 2;
console.log(MyAppName.Constants.FOO);       //does not change - still prints 1
0
Simon

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

var Constants = {};

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

function createConstant (prop, value) {
    Object.defineProperty(Constants , prop, {
      value: value,
      writable: false
   });
};
0
Sandip Nirmal