2009-11-02 13 views

Respuesta

34

Puede usar un eval para hacerlo, aunque trato de evitar ese tipo de cosas a toda costa.

alert(eval(someString)); 

Una mejor manera, si se ve en la necesidad de hacerlo, es utilizar una tabla hash.

var stuff = { myText: 'hello world!' }; 
var someString = 'myText'; 
alert(stuff[someString]); 
+1

si prefiero usar la ventana ['varname']; enfoque, ¿cómo lo haría usando con un objeto? 'var obj = {'eleID': 'varname'}; para (var clave en obj) { ventana [obj [clave]]; } ' Esto no parece funcionar :( –

1

Usted puede hacer esto con eval:

var myText = 'hello world!'; 
var someString = 'myText'; 

eval('var theTextInMyText = ' + someString + ';'); 

alert(theTextInMyText); 

El deseo de hacer esto en absoluto por lo general es un "olor código". Tal vez hay una manera más elegante ...

1
eval("alert(" + someString + ");"); 

funcionaría.

1

eval hará que:

var myText = 'hello world!!'; 
var someString = eval('myText'); 

document.getElementById('hello').innerHTML = someString; 

Como demonstrated here.

27

Si esa variable está en el ámbito global, se puede utilizar el bracket notation en el objeto global:

var myText = 'hello world!'; 
var someString = 'myText'; 

alert(window[someString]); 
+2

Increíble respuesta guarda el uso de eval +1 deseo podría + 10 – LmC

1

Asumiendo que esto es en el nivel superior, window[someString] === "hello world!".

1

En JavaScript, no hay un estándar para crear un 'Objeto maestro', o cualquier método incorporado para acceder a las variables en el alcance inicial con una referencia de cadena que conozco.

Sin embargo, si está utilizando JavaScript para el desarrollo web en un navegador, el objeto window le dará acceso completo a su alcance actual. Por ejemplo:

myVar = "This is my var"; 
if(myVar == window.myVar){ 
    /* 
     This statement would return true 
     Because both variables reference 
     the same string; 
    */ 
} 

Este método le permitirá hacer referencia a cualquier ámbito de variables sin que sea una cadena, pero también se puede utilizar una cadena según sea necesario con los selectores ([]) del soporte.

window['myVar'] 

Vale la pena mencionar que el mantenimiento de los datos como una variable directamente en el ámbito actual deja abierto para ser re-definido por otras secuencias de comandos que se ejecutan. Su variable puede ser sobrescrita por nombres de argumento de función, para variables de bucle, y simplemente asignando un nuevo valor a esa variable.

Para solucionar esto, sugiero usar un objeto para almacenar toda la información relevante en su aplicación (estático y/o OOP). De esta manera:

$myApp = { 
    var1 : 'This is Var1', 
    apply : function(){ 
      alert('Started!'); 
    } 
} 

//Referencing relative variables 
alert($myApp.var1); 
0

eval() no funcionó en mis pruebas. Pero es posible agregar nuevos códigos JavaScript al árbol DOM. Así que aquí hay una función que agrega una nueva variable:

function createVariable(varName,varContent) 
{ 
    var scriptStr = "var "+varName+"= \""+varContent+"\"" 

    var node_scriptCode = document.createTextNode(scriptStr) 
    var node_script = document.createElement("script"); 
    node_script.type = "text/javascript" 
    node_script.appendChild(node_scriptCode); 

    var node_head = document.getElementById("head") 
    node_head.appendChild(node_script); 
} 

createVariable("dynamicVar", "some content") 
console.log(dynamicVar) 
Cuestiones relacionadas