Variables "variables" dans Javascript?

Je sais qu'il est possible en PHP d'avoir des variables "variables". Par exemple

$x = "variable"; $$x = "hello, world!"; echo $variable; // displays "hello, world!" 

Est-ce possible dans javascript? Comment cela se fera-t-il?

Eh bien, sorte de. Si vous définissez la variable comme une propriété d'un objet:

 var obj = {} obj.foo = 42; var bar = 'foo'; console.log(obj[bar]); 

Fonctionne facilement pour les variables globales car elles sont définies comme propriétés de l'objet window .

Si vous désirez le faire, vous pouvez soit essayer eval ():

 var data = "testVariable"; eval("var temp_" + data + "=123;"); alert(temp_testVariable); 

Ou en utilisant l'objet fenêtre:

 var data = "testVariable"; window["temp_" + data] = 123; alert(window["temp_" + data]); 

http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript

Pour faire référence à une variable en javascript avec une seule chaîne, vous pouvez utiliser

 window['your_variable_name'] 

Vous pouvez également définir et référencer les variables et les objets dans les variables.

Bien sûr, vous pouvez, mais pas. Les variables doivent être globales.

 var killingFunction = 'alert' var killMeNow = 'please' var please = 'You have been killed!' this[killingFunction](this[killMeNow]) 
 var vars = {}; var var_name = "str"; vars[var_name] = "working"; console.log(vars["str"]); 

Vous pouvez utiliser la fonction JavaScript eval(str) .

Ce que fait cette fonction est de convertir la chaîne fournie en code JS, puis l'exécute.

Par exemple:

 eval("console.log('hello world')"); // Logs hello world 

Donc, pour l'utiliser comme variable variable, vous pouvez effectuer les opérations suivantes:

 var a = "hello"; var hello = "world"; console.log(a + " " + eval(a)); // Logs hello world 

Cela produira la même sortie que:

 console.log(a + " " + hello); // Logs hello world 

(L'exemple est tiré du manuel PHP sur les variables variables .)

Nous pouvons utiliser comme ça.

 var objectName[key]{ 'someDataName':'thatData', 'someOtherDataName':'thisData' } 

Si vous souhaitez obtenir une valeur de valeur, vous pouvez utiliser la boucle

 for(key in objectName){ objectName[key].someDataName; objectName[key].someOtherDataName; }