2009-10-31 9 views
6

Duplicar posibles:
How to access javascript variable value by creating another variable via concatenation?

En PHP que puede tener:

$theVariable = "bigToe"; 
$bigToe = "is broken"; 

tal que:

echo "my ".$theVariable." ".$$theVariable; 

haría pantalla

my bigToe is broken 

¿Cómo haré para hacer algo similar a eso en JavaScript?

+1

Ver: http://stackoverflow.com/questions/993013/how-to-access-javascript-variable-value-by-creating- another-variable-via-concaten –

+1

Sería mejor utilizar una matriz asociativa para eso en PHP, o un objeto en JavaScript. – JAL

+0

@ Código Pato: hay casos en que es útil. –

Respuesta

1

Simplemente

eval("variableName") 

Aunque usted tiene que asegurarse de que sabe el valor exacto de su evaling ya que puede ser utilizado para inyección de scripts si estás pasando que no es de confianza contenido

+1

Definitivamente no deberías usar eval –

+1

@Fabien: sé que eval tiene una gran cantidad de riesgos de seguridad, incluso comenté explícitamente a tal efecto. Dicho esto, la única forma de lograr lo que se solicitó es evaluar, diciendo que "definitivamente no se debe usar eval" implica que mi respuesta debería haber sido "es imposible", lo que es claramente incorrecto. – olliej

1

Una forma es utilizar la función de eval

var theVariable = "bigToe"; 
var bigToe = "is broken"; 
console.log('my '+theVariable+' '+eval(theVariable)); 

Otra forma es utilizar el objeto window, que tiene el par clave-valor para cada variable global. Se puede acceder como una matriz:

var theVariable = "bigToe"; 
var bigToe = "is broken"; 
console.log('my '+theVariable+' '+window[theVariable]); 

Ambos métodos imprimen la respuesta a la consola Firebug.

+2

la opción "ventana" es la mejor. Si su var no está en el ámbito global (por ejemplo, declarado en una función), debe reemplazar "ventana" por "this", o el nombre del objeto que contiene –

+1

@Fabien: si la var no está en el ámbito global, entonces use 'esto' como prefijo no lo ayudará; la única razón por la que 'esto' y 'ventana' son intercambiables es porque 'esto' es siempre el objeto global cuando se llama a una función sin base y la ventana es simplemente un alias a ese objeto global. – olliej

3

me gustaría utilizar la matriz en lugar de evalwindow:

var bigToe = "big toe"; 
window[bigToe] = ' is broken'; 
alert("my " + bigToe + window[bigToe]); 
+0

¿Por qué preferiría la ventana [] sobre eval()? – baiano

+1

@baiano: elimina las preocupaciones de seguridad que se introducen con el uso de 'eval', además de hacer referencia a un diccionario es * siempre * más rápido que evaluar Javascript solo para producir una solución. –

+0

@baiano - simplemente porque siempre tiendo a evitar el uso de 'eval' si puedo evitarlo. Consulte http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea – karim79

Cuestiones relacionadas