A differenza di PHP, JavaScript non offre accesso all'array globals (che contiene riferimenti a tutti i nomi di variabili attualmente dichiarati). Pertanto, JavaScript non offre supporto nativo per le variabili variabili. Tuttavia, è possibile emulare questa funzionalità purché si definiscano tutte le variabili come parte di un array o di un oggetto. Questo a sua volta creerà un array gloabls per te. Ad esempio, invece di dichiarare la variabile hello
nell'ambito globale in questo modo:
var hello = 'hello world';
incapsuliamolo all'interno di un oggetto. Chiameremo quell'oggetto vv (variabili variabili):
var vv = {
'hello': 'hello world',
//Other variable variables come here.
},
referToHello = 'hello';
Ora possiamo fare riferimento alla variabile tramite il suo indice, e poiché gli indici di array possono essere forniti utilizzando una variabile, stiamo di fatto facendo uso di una variabile variabile:
console.log(vv[referToHello]); //Output: hello world
La risposta alla tua domanda
Applichiamo questo al codice che hai fornito nella domanda originale:
var vv = {
'x': 'variable',
'variable': 'hello world!'
};
console.log(vv[vv['x']]); //Displays "hello, world!"
Un utilizzo pratico
Mentre il codice precedente potrebbe sembrare ridicolmente ingombrante e poco pratico, ci sono usi pratici per le variabili variabili in JavaScript che utilizzano questo tipo di incapsulamento. Nell'esempio seguente usiamo lo stesso concetto per ottenere l'ID di un numero indefinito di elementi HTML.
var elementIds = [],
elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
elements.forEach( (element) => {
elementIds[element] = document.getElementById(element);
});
Questo esempio dichiara le variabili variabili (chiavi in elementIds
) in base all'ID di ogni elemento e assegnerà il nodo di detto elemento come valore di ciascuna variabile. E poiché l'utilizzo di variabili globali in JavaScript è generalmente sconsigliato dare alle variabili variabili un ambito univoco (in questo caso, dichiararle all'interno elementIds
dell'array) non è solo pulito, ma anche più responsabile.