41 votes

Comment puis-je déclarer et utiliser des variables dynamiques en JavaScript ?

Supposons que j'ai besoin de déclarer une variable JavaScript basée sur un compteur, comment dois-je le faire?

var pageNumber = 1;
var "text"+pageNumber;

Le code ci-dessus ne fonctionne pas.

74voto

bungdito Points 1094

En JavaScript (que je sache) il existe 2 façons de créer des variables dynamiques :

  1. La fonction eval
  2. L'objet window

eval :

var pageNumber = 1;
eval("var text" + pageNumber + "=123;");
alert(text1);

objet window :

var pageNumber = 1;
window["text" + pageNumber] = 123;
alert(window["text" + pageNumber]);

0 votes

Par exemple, j'ai un tableau dans une variable dynamique window["text" + pageNumber] - comment obtenir la taille du tableau ?

0 votes

Window["text" + pageNumber].length

2 votes

Après 6 ans cette réponse a sauvé ma vie ! Merci !!

8voto

zyklus Points 31683

Comment accéderiez-vous ensuite à ladite variable si vous ne connaissez pas son nom? :) Vous feriez probablement mieux de définir un paramètre sur un objet, par exemple :

var obj = {};
obj['text' + pageNumber] = 1;

si vous voulez vraiment faire cela :

eval('var text' + pageNumber + '=1');

3 votes

Il y a beaucoup de façons d'accéder auxdites variables: en parcourant un ensemble de numéros où les variables sont nommées var1, var2, var3. Ou en récupérant un ensemble de variables inconnu et en les chargeant dynamiquement en parcourant un objet json et en mettant à jour les variables globales, je suis sûr qu'il existe de nombreux autres scénarios

6voto

Jayantha Points 11282

Je ne pense pas que vous puissiez le faire en utilisant JavaScript. Je pense que vous pouvez utiliser un tableau à la place de cela,

 var textArray=new Array();
    textArray[pageNumber]="something";

4voto

NT3RP Points 6566

En supposant que la variable est dans la portée globale, vous pourriez faire quelque chose comme ceci :

var x = 1;
var x1 = "test"
console.log(window["x" + x]); // affiche "test"

Cependant, une meilleure question pourrait être pourquoi vous voulez un tel comportement.

2voto

KooiInc Points 38845

Vous pouvez également envelopper votre compteur dans un objet :

var PageNumber = (function() {
  var value = 0;
  return {
   getVal: function(){return value;},
   incr: function(val){
            value += val || 1;
            this['text'+value]=true /*or some value*/;
            return this;
         }
   };
})();

alert(PageNumber.incr().incr().text2); //=>true
alert(PageNumber['text'+PageNumber.getVal()]) /==> true

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