2009-11-02 37 views

Trả lời

34

Bạn có thể sử dụng eval để làm điều đó, mặc dù tôi cố gắng tránh điều đó bằng mọi giá.

alert(eval(someString)); 

Cách tốt hơn, nếu bạn thấy mình cần làm điều này, là sử dụng bảng băm.

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

nếu tôi muốn sử dụng cửa sổ ['varname']; cách tiếp cận, làm thế nào tôi sẽ làm điều đó bằng cách sử dụng với một đối tượng? 'var obj = {'eleID': 'varname'}; cho (var key in obj) { cửa sổ [obj [key]]; } ' Điều này dường như không hoạt động: ( –

1

Bạn có thể làm điều này với eval:

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

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

alert(theTextInMyText); 

Mong muốn làm được điều này ở tất cả thường là một "mã mùi". Có lẽ có một cách thanh lịch hơn ...

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

sẽ hoạt động.

1

eval sẽ làm điều đó:

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

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

Như demonstrated here.

27

Nếu biến đó là trên phạm vi toàn cầu, bạn có thể sử dụng bracket notation trên đối tượng toàn cầu:

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

alert(window[someString]); 
+2

Câu trả lời tuyệt vời tiết kiệm việc sử dụng ước muốn eval +1 tôi có thể + 10 – LmC

1

Giả sử đây là ở cấp cao nhất, window[someString] === "hello world!".

1

Trong JavaScript, không có tiêu chuẩn để tạo 'Đối tượng chính' hoặc bất kỳ phương pháp tích hợp nào để truy cập các biến trên phạm vi ban đầu với tham chiếu chuỗi mà tôi biết.

Tuy nhiên, nếu bạn đang sử dụng JavaScript để phát triển web trên trình duyệt, đối tượng window sẽ cấp cho bạn quyền truy cập đầy đủ vào phạm vi hiện tại của bạn. Ví dụ:

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

Phương pháp này sẽ cho phép bạn để tham khảo bất kỳ phạm vi biến KHÔNG làm cho nó một chuỗi, nhưng bạn cũng có thể sử dụng một chuỗi khi cần thiết với khung ([]) Selectors.

window['myVar'] 

Điều đáng nói rằng giữ dữ liệu như là một biến trực tiếp trên phạm vi hiện lá nó mở được tái định nghĩa bởi các kịch bản khác chạy. Biến của bạn có thể được ghi đè bằng tên đối số hàm, cho biến vòng lặp và chỉ đơn giản bằng cách gán giá trị mới cho biến đó.

Để khắc phục điều này, tôi đề nghị sử dụng một đối tượng để lưu trữ tất cả dữ liệu liên quan đến ứng dụng của bạn (tĩnh và/hoặc OOP). Như thế này:

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

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

eval() không hoạt động trong các thử nghiệm của tôi. Nhưng việc thêm mã JavaScript mới vào cây DOM là có thể. Vì vậy, đây là chức năng thêm biến mới:

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) 
Các vấn đề liên quan