Contrairement à PHP, JavaScript n'offre pas d'accès au tableau globals (qui contient des références à tous les noms de variables actuellement déclarés). En tant que tel, JavaScript n'offre pas de prise en charge native des variables variables. Cependant, vous pouvez émuler cette fonctionnalité tant que vous définissez toutes vos variables dans le cadre d'un tableau ou d'un objet. Cela créera à son tour un tableau gloabls pour vous. Par exemple, au lieu de déclarer la variable hello
dans la portée globale comme ceci:
var hello = 'hello world';
encapsulons-le dans un objet. Nous appellerons cet objet vv (variables variables):
var vv = {
'hello': 'hello world',
//Other variable variables come here.
},
referToHello = 'hello';
Maintenant, nous pouvons faire référence à la variable par son index, et comme les index de tableau peuvent être fournis en utilisant une variable, nous utilisons de facto une variable variable:
console.log(vv[referToHello]); //Output: hello world
La réponse à votre question
Appliquons ceci au code que vous avez fourni dans la question d'origine:
var vv = {
'x': 'variable',
'variable': 'hello world!'
};
console.log(vv[vv['x']]); //Displays "hello, world!"
Une utilisation pratique
Bien que le code précédent puisse sembler ridiculement encombrant et peu pratique, il existe des utilisations pratiques des variables variables dans JavaScript en utilisant ce type d'encapsulation. Dans l'exemple ci-dessous, nous utilisons le même concept pour obtenir l'ID d'un nombre indéfini d'éléments 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);
});
Cet exemple déclare des variables variables (clés d'entrée elementIds
) en fonction de l'ID de chaque élément, et attribuera le nœud dudit élément comme valeur de chaque variable. Et comme l'utilisation de variables globales dans JavaScript est généralement déconseillée, donner à vos variables variables une portée unique (dans ce cas, les déclarer à l'intérieur du elementIds
tableau) est non seulement soigné, mais aussi plus responsable.