Sé que en PHP es posible tener variables "variables". Por ejemplo
$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"
¿Es posible referirse a una variable por su nombre como una cadena en javascript? ¿Cómo se haría?
javascript
variables
variable-variables
Cordón1291
fuente
fuente
Respuestas:
No existe una solución única para esto (bueno, la hay
eval
, pero no lo consideremos seriamente). Es posible acceder a algunas variables globales dinámicamente a través dewindow
, pero eso no funciona para las variables locales de una función. Las variables globales que no se convierten en propiedad dewindow
son variables definidas conlet
yconst
, yclass
es.¡Casi siempre hay una solución mejor que usar variables variables! En su lugar, debería mirar las estructuras de datos y elegir la más adecuada para su problema.
Si tiene un conjunto fijo de nombres, como
almacene esos nombres / valores como propiedades de un objeto y use la notación entre corchetes para buscarlos dinámicamente:
En ES2015 + es aún más fácil hacer esto para las variables existentes usando una notación de propiedad concisa :
Si tiene variables numeradas "consecutivamente", como
entonces debería usar una matriz en su lugar y simplemente usar el índice para acceder al valor correspondiente:
fuente
Si está desesperado por hacer esto, puede intentar usar eval ():
O usando el objeto de ventana:
http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript
fuente
eval
no se pueden crear variables locales en modo estricto. Sin embargo, una llamada indirecta puede crear variables globales.Para hacer referencia a una variable en javascript con solo una cadena, puede usar
Puede establecer y hacer referencia a variables y objetos en variables también.
fuente
A diferencia de PHP, JavaScript no ofrece acceso a la matriz global (que contiene referencias a todos los nombres de variables declarados actualmente). Como tal, JavaScript no ofrece soporte nativo para variables variables. Sin embargo, puede emular esta función siempre que defina todas sus variables como parte de una matriz o un objeto. Esto, a su vez, creará una matriz gloabls para usted. Por ejemplo, en lugar de declarar la variable
hello
en el ámbito global de esta manera:vamos a encapsularlo dentro de un objeto. Llamaremos a ese objeto vv (variables variables):
Ahora podemos referirnos a la variable por su índice, y dado que los índices de matriz se pueden proporcionar usando una variable, de facto estamos haciendo uso de una variable variable:
La respuesta a tu pregunta
Apliquemos esto al código que proporcionó en la pregunta original:
Un uso práctico
Si bien el código anterior puede parecer ridículamente engorroso y poco práctico, existen usos prácticos para las variables variables en JavaScript que utilizan este tipo de encapsulación. En el siguiente ejemplo, usamos el mismo concepto para obtener el ID de un número indefinido de elementos HTML.
Este ejemplo declara variables variables (teclea
elementIds
) en base al ID de cada elemento, y asignará el nodo de dicho elemento como el valor de cada variable. Y dado que generalmente se desaconseja el uso de variables globales en JavaScript, dar a sus variables variables un alcance único (en este caso, declararlas dentro de laelementIds
matriz) no solo es ordenado, sino también más responsable.fuente
Por supuesto que puede, pero no lo haga. Las variables tienen que ser globales.
fuente
fuente
Puede utilizar la
eval(str)
función de JavaScript .Lo que hace esta función es convertir la cadena proporcionada en código JS y luego ejecutarla.
Por ejemplo:
Entonces, para usarlo como una variable variable, puede hacer lo siguiente:
Esto producirá exactamente el mismo resultado que:
(El ejemplo se toma del manual de PHP sobre variables variables ).
fuente