Question Y a-t-il des constantes dans JavaScript?


Est-il possible d'utiliser des constantes dans JavaScript?

Si non, quelle est la pratique courante pour spécifier les variables utilisées comme constantes?


1061
2017-09-24 22:45


origine


Réponses:


Depuis ES2015, JavaScript a une notion de const:

const MY_CONSTANT = "some-value";

Cela fonctionnera dans à peu près tous les navigateurs sauf IE 8, 9 et 10. Certains peuvent aussi avoir besoin mode strict activée.

Vous pouvez utiliser var avec des conventions comme ALL_CAPS pour montrer que certaines valeurs ne devraient pas être modifiées si vous avez besoin de supporter des navigateurs plus anciens ou si vous travaillez avec du code existant:

var MY_CONSTANT = "some-value";

965
2017-09-24 22:46



Essayez-vous de protéger les variables contre les modifications? Si c'est le cas, vous pouvez utiliser un modèle de module:

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

En utilisant cette approche, les valeurs ne peuvent pas être modifiées. Mais, vous devez utiliser la méthode get () sur CONFIG :(.

Si vous n'avez pas besoin de protéger strictement la valeur des variables, alors faites comme suggéré et utilisez une convention de toutes les capitales.


304
2017-09-25 03:14



le const mot-clé est en le projet ECMAScript 6 mais il ne bénéficie jusqu'ici que d'une poignée de support de navigateur: http://kangax.github.io/compat-table/es6/. La syntaxe est:

const CONSTANT_NAME = 0;

118
2018-03-26 20:29



IE supporte des constantes, en quelque sorte, par exemple:

<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

Voir Object.freeze. Vous pouvez utilisation const si vous voulez faire le constants référence en lecture seule également.


63
2018-05-04 23:58



ECMAScript 5 présente Object.defineProperty:

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

Ses pris en charge dans tous les navigateurs modernes (ainsi que IE ≥ 9).

Voir également: Object.defineProperty dans ES5?


56
2018-01-09 00:41



Non, pas en général. Firefox implémente const mais je sais que IE ne le fait pas.


@John pointe vers une pratique de dénomination commune pour les consts qui a été utilisée pendant des années dans d'autres langues, je ne vois pas pourquoi vous ne pourriez pas l'utiliser. Bien sûr, cela ne signifie pas que quelqu'un n'écrira pas la valeur de la variable de toute façon. :)


23
2017-09-24 22:45



Mozilla MDN Web Docs contenir de bons exemples et des explications sur const. Extrait:

// 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;

Mais il est triste que IE9 / 10 ne supporte toujours pas const. Et la raison pour laquelle c'est absurde:

Alors, que fait IE9 avec const? Alors   loin, notre décision a été de ne pas   soutiens le. Ce n'est pas encore un consensus   fonctionnalité car il n'a jamais été disponible   sur tous les navigateurs.

...

En fin de compte, il semble que le meilleur   solution à long terme pour le web est de   le laisser dehors et attendre   processus de normalisation pour exécuter leur   cours.

Ils ne l'implémentent pas parce que les autres navigateurs ne l'ont pas implémenté correctement ?! Trop peur de le rendre meilleur? Définition des standards ou pas, une constante est une constante: mise une fois, jamais changée.

Et à toutes les idées: Chaque fonction peut être écrasée (XSS etc.). Donc, il n'y a pas de différence var ou function(){return}. const est la seule vraie constante.

Mettre à jour: IE11 les soutiens  const:

IE11 inclut la prise en charge des fonctionnalités bien définies et couramment utilisées de la nouvelle norme ECMAScript 6, notamment: const, Map, Set, et WeakMap, aussi bien que __proto__ pour une interopérabilité améliorée.


19
2018-04-30 09:57



En JavaScript, ma préférence est d'utiliser des fonctions pour retourner des valeurs constantes.

function MY_CONSTANT() {
   return "some-value";
}


alert(MY_CONSTANT());

18
2017-11-24 19:46



Si cela ne vous dérange pas d'utiliser les fonctions:

var constant = function(val) {
   return function() {
        return val;
    }
}

Cette approche vous donne des fonctions au lieu de variables régulières, mais elle garantit* que personne ne peut modifier la valeur une fois qu'elle est définie.

a = constant(10);

a(); // 10

b = constant(20);

b(); // 20

Personnellement, je trouve cela plutôt agréable, surtout après m'être habitué à ce modèle d'observables à élimination directe.

* Sauf si quelqu'un a redéfini la fonction constant avant de l'appeler


16
2017-12-30 19:42