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-il possible de faire référence à une variable par son nom sous forme de chaîne en javascript? Comment cela se ferait-il?
javascript
variables
variable-variables
ShoeLace1291
la source
la source
Réponses:
Il n'y a pas de solution unique pour cela (enfin, il y en a
eval
, mais ne le considérons pas sérieusement). Il est possible d'accéder dynamiquement à certaines variables globales viawindow
, mais cela ne fonctionne pas pour les variables locales à une fonction. Les variables globales qui ne deviennent pas une propriété dewindow
sont des variables définies aveclet
etconst
, etclass
es.Il y a presque toujours une meilleure solution que d'utiliser des variables variables! Au lieu de cela, vous devriez examiner les structures de données et choisir celle qui convient à votre problème.
Si vous avez un ensemble fixe de noms, comme
stockez ces noms / valeurs comme propriétés d'un objet et utilisez la notation entre crochets pour les rechercher dynamiquement:
Dans ES2015 +, il est encore plus facile de le faire pour les variables existantes en utilisant une notation de propriété concise :
Si vous avez des variables numérotées "consécutivement", telles que
alors vous devriez utiliser un tableau à la place et utiliser simplement l'index pour accéder à la valeur correspondante:
la source
Si vous êtes désespéré de faire cela, vous pouvez soit essayer d'utiliser eval ():
Ou en utilisant l'objet window:
http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript
la source
eval
impossible de créer des variables locales en mode strict. Un appel indirect peut cependant créer des variables globales.Pour référencer une variable en javascript avec seulement une chaîne, vous pouvez utiliser
Vous pouvez également définir et référencer des variables et des objets dans des variables.
la source
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:encapsulons-le dans un objet. Nous appellerons cet objet vv (variables variables):
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:
La réponse à votre question
Appliquons ceci au code que vous avez fourni dans la question d'origine:
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.
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 duelementIds
tableau) est non seulement soigné, mais aussi plus responsable.la source
Bien sûr, vous pouvez, mais ne le faites pas. Les variables doivent être globales.
la source
la source
Vous pouvez utiliser le JavaScript
eval(str)
fonction .Cette fonction convertit la chaîne fournie en code JS, puis l'exécute.
Par exemple:
Donc, pour l'utiliser comme variable variable, vous pouvez faire ce qui suit:
Cela produira exactement la même sortie que:
(L'exemple est tiré du manuel PHP sur les variables variables .)
la source