Javascript "Variables Variables": comment affecter une variable en fonction d'une autre variable?

J'ai un ensemble de variables de compteur globales en Javascript:

var counter_0 = 0; var counter_1 = 0; var counter_2 = 0; 

etc

J'ai alors une fonction Javascript qui accepte un numéro 'index' qui correspond à ces compteurs globaux. A l'intérieur de cette fonction, j'ai besoin de lire et d'écrire sur ces compteurs globaux en utilisant la valeur "index" passée à la fonction.

Exemple de la façon dont je voudrais que cela fonctionne, mais bien sûr, ça ne fonctionne pas du tout:

 function process(index) { // do some processing // if 'index' == 0, then this would be incrementing the counter_0 global variable ++counter_+index; if (counter_+index == 13) { // do other stuff } } 

J'espère que ce que j'essaie d'accomplir est clair. Sinon, je vais essayer de clarifier. Merci.

EDIT Clarification:

Je n'essaie pas d'incrémenter le nom du compteur, mais plutôt la valeur contenue dans le compteur.

On me regarde comme un tableau, ou est-ce que je manque quelque chose?

 var counters = [0,0,0]; function process(index) { ++counters[index]; /* or ++counters[index]+index, not sure what you want to do */ if (counters[index] === 13) { /* do stuff */ } } 

La fonction eval() javascript vous permettra d'accomplir cela. Cependant, il est généralement mal vu. Votre question n'a pas explicitement exclu les tableaux. Les tableaux seraient certainement plus appropriés pour le modèle que vous avez décrit.

 function process(index) { // do some processing var counter; eval('counter = ++counter_'+index); if (counter == 13) { // do other stuff } } 

Assurez-vous que l'indice est vraiment un nombre entier, sinon, un tremblement pourrait s'ensuivre.

Edit : D'autres ont souligné que vous devriez utiliser un tableau si vous le pouvez. Mais si vous êtes coincé avec les variables globales nommées, l'approche ci-dessus fonctionnera.

Edit : Bobine souligne que vous pouvez utiliser l'objet window pour accéder à globals par nom, et ainsi mérite un crédit pour ce qui suit:

 function process(index) { // do some processing var counter = ++window['counter_' + index]; if (counter == 13) { // do other stuff } } 

D'autres réponses ont déclaré "ne pas utiliser eval() ", mais pas pourquoi. Voici une explication de MDC :

N'utilisez pas eval!

Eval () est une fonction dangereuse, qui exécute le code passé avec les privilèges de l'appelant. Si vous exécutez eval () avec une chaîne qui pourrait être affectée par une partie malveillante, vous pouvez finir par exécuter un code malveillant sur l'ordinateur de l'utilisateur avec les autorisations de votre page Web / extension.

Il existe des alternatives sûres à eval () pour les cas d'usage courant.