Utilice nombres de variables dinámicas en JavaScript [duplicado]
En PHP puedes hacer cosas increíbles/horrendas como esta:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
¿Hay alguna manera de hacer algo como esto con Javascript?
Por ejemplo, si tengo un var name = 'the name of the variable';
¿puedo obtener una referencia a la variable con nombre name
?
Dado que ECMA-/Javascript se trata de Objects
y (que también son algún tipo de Objeto), cada variable se almacena en una variableContexts
llamada (o en el caso de una Función, Objeto de activación ).
Entonces, si creas variables como esta:
var a = 1,
b = 2,
c = 3;
En el alcance global (= SIN contexto de función), escribe implícitamente esas variables en el objeto Global (= window
en un navegador).
Se puede acceder a ellos utilizando la notación de "punto" o "corchete":
var name = window.a;
o
var name = window['a'];
Esto sólo funciona para el objeto global en este caso particular, porque el objeto variable del objeto global es el window
objeto mismo. Dentro del contexto de una función, no tienes acceso directo al objeto de activación . Por ejemplo:
function foobar() {
this.a = 1;
this.b = 2;
var name = window['a']; // === undefined
console.log(name);
name = this['a']; // === 1
console.log(name);
}
new foobar();
new
crea una nueva instancia de un objeto autodefinido (contexto). Sin new
el alcance de la función sería también global
(=ventana). Este ejemplo alertaría undefined
y 1
respectivamente. Si reemplazáramos this.a = 1; this.b = 2
con:
var a = 1,
b = 2;
Ambas salidas de alerta no estarían definidas. En ese escenario, las variables a
y b
se almacenarían en el Objeto de activación desde foobar
, al que no podemos acceder (por supuesto, podríamos acceder a ellas directamente llamando a
a y b
).
eval
es una opción.
var a = 1;
var name = 'a';
document.write(eval(name)); // 1
Advertencia: Tenga en cuenta que no se recomienda utilizar la eval()
función si no sabe lo que está haciendo, ya que trae múltiples problemas de seguridad. Utilice otra cosa a menos que sea absolutamente necesario. Consulte la página de MDN para evaluación para obtener más información.
Puede utilizar el objeto ventana para acceder a él.
window['myVar']
window
tiene una referencia a todas las variables globales y funciones globales que está utilizando.
Simplemente no sé qué mala respuesta obtiene tantos votos. Es una respuesta bastante fácil pero la haces compleja.
// If you want to get article_count
// var article_count = 1000;
var type = 'article';
this[type+'_count'] = 1000; // in a function we use "this";
alert(article_count);