51 votes

Peut-on déclarer des constantes globales en JavaScript ?

Si oui, quelle est la syntaxe d'une telle déclaration ?

0 votes

Si par global vous voulez dire une variable qui peut être appelée après changement sur les pages du domaine alors ce dont vous avez besoin c'est de cookies

0 votes

@Dcrodger : Non, juste global entre les fonctions. En outre, il s'agit d'une constante, pas d'une variable - par conséquent, les cookies seraient exagérés.

0 votes

35voto

Pointy Points 172438

Javascript n'a pas vraiment la notion de constante nommée, ou de propriété immuable d'un objet. (Notez que je ne parle pas de ES5 ici).

Vous pouvez déclarer les globaux avec un simple var dans la portée globale, comme en dehors de toute fonction dans un script inclus par une page web :

<script>
  var EXACTLY_ONE = 1;

Votre code peut alors utiliser cette constante bien sûr, bien qu'elle ne soit pas vraiment "constante" car la valeur peut être modifiée (la propriété est mise à jour, en d'autres termes).

modifier - C'est une réponse ancienne à une question ancienne. En 2019, il y a le const déclaration qui est soutenue un peu partout. Notez toutefois que, comme let , const Le cadrage est différent de var le scoping.

31voto

Ken Points 499

Comme "Pointy" l'a si bien noté, ECMAscript ne dispose pas d'une telle fonctionnalité. Cependant, JavaScript fait :

const a = 7;
document.writeln("a is " + a + ".");

Bien sûr, si vous écrivez du code à mettre sur le web pour qu'il s'exécute dans des navigateurs web, cela ne vous aidera pas beaucoup :-)

5 votes

Pourquoi diable cela a-t-il été descendu ? C'est vrai, peu connu et utile si vous travaillez dans un environnement exclusivement Mozilla. +1 de ma part.

0 votes

@CMS : Intéressant, je ne m'étais pas penché sur la question. Merci.

0 votes

Peut-être la réponse est-elle rejetée parce qu'elle ne répond pas à la question de la globalité.

21voto

Josh K Points 11621

Tout est global à moins d'être déclaré avec l'option var mot-clé.

Il n'y a pas de constantes non plus. Vous pouvez simplement les déclarer sans le var mot-clé.

Si vous voulez assurer une portée globale, vous pouvez l'insérer dans la balise window objet :

window.GLOBAL_CONSTANT = "value";

Vous pouvez le faire à partir de n'importe quelle portée. Les constantes peuvent ensuite être déclarées dans des fonctions ou des fermetures, bien que je ne le recommande pas.

0 votes

Si vous supprimez le mot-clé var, vous obtenez une erreur indéfinie en mode strict.

1 votes

Vous voudrez peut-être modifier le texte pour parler du mode strict, d'autres environnements (comme nodejs, qui utilise global au lieu de window ), new Function("return this")() y globalThis

13voto

kojow7 Points 2110

Si vous ne vous souciez que de la prise en charge des navigateurs les plus récents (ou si vous utilisez un transpilateur tel que Babel pour prendre en charge les navigateurs plus anciens), vous pouvez procéder comme suit :

  1. Créez un fichier settings.js avec les constantes que vous souhaitez et exportez-les :
export const FRUIT = "kiwi";
export const VEGETABLE = "carrot";
  1. Dans les fichiers que vous souhaitez utiliser, vous pourriez alors les importer comme suit :
import * as Settings from './settings.js'
  1. Ensuite, pour utiliser les constantes, faites quelque chose comme ceci :
console.log("The unchangeable fruit is " + Settings.FRUIT);

Il s'agit d'une approche beaucoup plus propre que d'essayer de mettre en œuvre une constante globale, en particulier lorsque vous avez plusieurs fichiers JavaScript dans lesquels vous souhaitez utiliser les constantes.

9voto

Basic Block Points 543

Vous pourriez le faire avec des getters et setters comme ceci :

Object.defineProperty(window, 'TAU', { 
    get: function(){return Math.PI*2;}
});

Si vous voulez une fonction générale pour faire cela :

function define(name, value){
    Object.defineProperty(window, name, { 
       get: function(){return value;},
       set: function(){throw(name+' is a constant and cannot be redeclared.');},
    });
}

// Example use
define('TAU', Math.PI*2);

1 votes

+1 pour l'utilisation de getters et setters (ce qui devrait permettre au code qui n'est pas dans la portée globale de définir des globaux constants). Vous pouvez modifier le texte pour parler du mode strict, d'autres environnements (tels que nodejs, qui utilise le mode global au lieu de window ), new Function("return this")() y globalThis .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X