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; }