2009-11-02 11 views

Odpowiedz

34

Możesz użyć do tego celu eval, ale staram się unikać tego rodzaju rzeczy za wszelką cenę.

alert(eval(someString)); 

Lepszym sposobem, jeśli musisz to zrobić, jest użycie tabeli mieszania.

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

jeśli wolę używać okna ["nazwa_zmiennej"]; podejście, jak mam to zrobić używając obiektu? 'var obj = {'eleID': 'nazwa_zmiennej}}; dla (klawisz var w obiekcie) { okno [obj [klawisz]]; } ' To nie wydaje się działać :( –

1

Można to zrobić z eval:

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

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

alert(theTextInMyText); 

Pragnienie to zrobić w ogóle zwykle jest "zapachy kodu". Być może jest bardziej elegancki sposób ...

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

będzie działać.

1

eval zrobi, że:

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

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

Jak demonstrated here.

27

Jeśli zmienna jest w zasięgu globalnym, można użyć bracket notation na globalnym obiektu:

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

alert(window[someString]); 
+2

Niesamowita odpowiedź ratuje korzystanie z ewaluny +1 życzenie, które mogłem + 10 – LmC

1

Zakładając ten jest na najwyższym poziomie, window[someString] === "hello world!".

1

W języku JavaScript nie ma standardu tworzenia "obiektu głównego" ani żadnej wbudowanej metody uzyskiwania dostępu do zmiennych w początkowym zasięgu za pomocą odwołania do napisu, o którym jestem świadomy.

Jeśli jednak używasz JavaScript do tworzenia stron internetowych w przeglądarce, obiekt window zapewnia pełny dostęp do bieżącego zakresu. Na przykład:

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

Metoda ta pozwoli na odniesienie jakiegokolwiek zakresami zmienną bez uczynienia go ciąg, ale można również wykorzystać jako ciąg potrzebne ze wspornikiem ([]) selektorów.

window['myVar'] 

Warto wspomnieć, że utrzymanie danych jako zmienną bezpośrednio na bieżącym zakresie pozostawia otwarte zostać ponownie zdefiniowane przez innych skryptów uruchomionych. Zmienna może zostać nadpisana przez nazwy argumentów funkcji, zmienne pętli i po prostu przez przypisanie nowej wartości do tej zmiennej.

Aby temu zaradzić, sugeruję użycie obiektu do przechowywania wszystkich istotnych danych w aplikacji (statyczna i/lub operacyjna). W ten sposób:

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

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

eval() nie działał w moich testach. Ale możliwe jest dodanie nowego kodu JavaScript do drzewa DOM. Oto funkcja, która dodaje nową zmienną:

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) 
Powiązane problemy