2010-12-09 8 views
8

Hola, ¿es posible acceder al valor de una variable de JavaScript por su nombre? Ejemplo:¿Valor de acceso de variable de JavaScript por nombre?

var MyVariable = "Value of variable"; 


function readValue(name) { 
    .... 
} 


alert(readValue("MyVariable")); 

¿Es esto posible, de modo que la salida sea "Valor de la variable"? Si es así, ¿cómo escribo esta función?

Gracias

+0

Compruebe mi edición, por favor. – SeanKendle

Respuesta

8

Las variables globales se definen en el objeto window, por lo que puede utilizar:

var MyVariable = "Value of variable"; 
alert(window["MyVariable"]); 
+0

-1 Debe eliminar 'var' antes de MyVariable para que forme parte del objeto window. – craftsman

+2

@craftsman: eso no es verdad. Todas las variables declaradas en el alcance global son parte del objeto ventana. –

+3

¿por qué las personas marcan estas respuestas como correctas? Solo es correcto si todo en OP está en el contexto global. La respuesta correcta necesita agregar un objeto de "contexto" o arreglar un diseño deficiente. –

5

Sí, puede hacerlo de esta manera:

var MyVariable = "Value of variable"; 
alert(window["MyVariable"]); 
+1

Esto es correcto, para aquellos interesados ​​en aprender más, se llama [notación de corchetes] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators). –

+0

Ese es un gran enlace, Nick. ¡Gracias por compartir! – wsanville

+1

..y la razón por la que está usando window [] es porque MyVariable está en alcance global lo que la hace una propiedad del objeto 'window'. (el objeto 'window' es el objeto global en el lado del cliente JS) – instantsetsuna

3
var MyVariable = "Value of variable";  
alert(readValue("MyVariable"));  

// function readEValue(name) { readevalue -> readvalue // always do copy-paste to avoid errors 
function readValue(name) { 
return window[name] 
} 

Eso es todo sobre; o)

+0

Fin-de-líneas (Carriage-Return) no funcionó en mi respuesta. Lo siento. Tenga cuidado de reconstituirlos. –

+0

¿No será necesario declarar la función antes de intentar alertar el valor devuelto? – SeanKendle

1
var sen0=1; 
if(window["sen"+n] > 0){ 
} 
0

probar este^_^

var MyVariable = "Value of variable"; 

alert(readValue("MyVariable")); 

function readValue(name) { 
    return eval(name) 
} 
+0

[¿Por qué utilizar la función de evaluación de JavaScript es una mala idea] (http://stackoverflow.com/a/86580/1172714) – dsh

+0

^pero ya se ha llamado a la variable. entonces es seguro –

+0

Si codifica la cadena, puede verificar que sea segura ... o simplemente eliminar las comillas y usar el nombre normalmente. Si el nombre de la variable está en una cadena, entonces estoy muy seguro de que vendrá de algún lugar externo (respuesta AJAX, contenido de la base de datos, etc.) que no se puede auditar por seguridad. – dsh

Cuestiones relacionadas