2009-11-02 11 views

risposta

34

È possibile utilizzare uno eval per farlo, anche se cerco di evitare questo genere di cose a tutti i costi.

alert(eval(someString)); 

Un modo migliore, se ci si trova a doverlo fare, è utilizzare una tabella hash.

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

se preferirei usare la finestra ['varname']; approccio, come lo farei usando con un oggetto? 'var obj = {'eleID': 'varname'}; per (var key in obj) { window [obj [key]]; } Questo non sembra funzionare :( –

1

Si può fare questo con eval:

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

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

alert(theTextInMyText); 

Il desiderio di fare questo a tutti di solito è un "codice odore". Forse c'è un modo più elegante ...

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

avrebbe funzionato.

1

eval farà che:

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

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

Come demonstrated here.

27

Se quella variabile è sulla portata globale, è possibile utilizzare il bracket notation sull'oggetto globale:

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

alert(window[someString]); 
+2

Una risposta stupefacente salva l'uso di eval +1 wish potrei + 10 – LmC

1

supponendo che questo è al livello più alto, window[someString] === "hello world!".

1

In JavaScript, non esiste uno standard per la creazione di un "Oggetto master" o di un qualsiasi metodo incorporato per accedere alle variabili sull'ambito iniziale con un riferimento di stringa di cui sono a conoscenza.

Tuttavia, se si utilizza JavaScript per lo sviluppo Web su un browser, l'oggetto window consente di accedere completamente all'ambito corrente. Ad esempio:

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

Questo metodo permetterà di fare riferimento a qualsiasi portata variabile senza farne una stringa, ma è anche possibile utilizzare una stringa come necessario con la staffa ([]) selettori.

window['myVar'] 

Vale la pena ricordare che il mantenimento di dati come variabile direttamente sulla portata attuale lascia aperta essere ridefinito da altri script in esecuzione. La variabile può essere sovrascritta dai nomi degli argomenti delle funzioni, per le variabili del ciclo e semplicemente assegnando un nuovo valore a tale variabile.

Per risolvere questo problema, suggerisco di utilizzare un oggetto per archiviare tutti i dati rilevanti per l'applicazione (statico e/o OOP). Mi piace:

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

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

eval() non ha funzionato nei miei test. Ma è possibile aggiungere un nuovo codice JavaScript all'albero DOM. Quindi ecco una funzione che aggiunge una nuova variabile:

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) 
Problemi correlati