83 votes

Obtenir la variable globale dynamiquement par chaîne de nom en JavaScript

<script>
//in one script
var someVarName_10 = 20;
</script>

Je veux accéder à cette variable à partir d'un autre script par nom de variable. Avec l'objet fenêtre c'est simple, est-ce possible avec la variable locale ?

Je veux dire accéder à ce var par code comme ceci :

<script>
  alert(all_vars['someVar' + 'Name' + num]);
</script>

123voto

YOU Points 44812

Tu veux faire quelque chose comme ça ?

<script>
//in one script
var someVarName_10 = 20;

alert(window["someVarName_10"]); //alert 20

</script>

Mise à jour : car OP a modifié la question.

<script>
  num=10;
  alert(window['someVar' + 'Name_' + num]); //alert 20
</script>

46voto

Andrew Shatnyy Points 91

J'ai remarqué que tout le monde conseille la création de var globale, ce qui entraînera des fuites de variables vers l'espace de noms global. Lorsque vous créez dynamiquement des noms de classe ou simplement des variables, il est facile de les garder locales :

this['className'] = 123;

ou

this['varName'] = 123;

L'espacement des noms ressemblerait à ceci :

vars = {};
vars['varName'] = 123;
vars.varName // 123

13voto

Matteo Baroni Points 139
<script>
    var someVarName_10 = 20;
    var num = 10;
    alert(eval('someVar' + 'Name_' + num)); //alert 20
</script>

1voto

eh bien, à des fins de débogage seulement, vous pourriez faire quelque chose comme ça. Je l'utilise lors du développement des classes, où certaines variables doivent rester privées (var). ce travail même dans la variable locale (et globale de malédiction)

function MYCLASS(){
    var a=1, b=2, c=3;
    this.public = "variable";
    this.debug = function(sVar){
        return eval(sVar);
    }
}

var myThing = new MYCLASS();
myThing.debug('a') //return 1
myThing.debug('b') //return 2
myThing.debug('c') //return 3

0voto

jstr Points 664

Essayez

<script type="text/javascript">
var hello = 'test';
alert(window.hallo);
</script>

ou

<script type="text/javascript">
var hello = 'test';
alert(window["test"]);
</script>

Où "test" peut être n'importe quel Stringname d'une variable

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