2009-10-31 22 views
6

thể trùng lặp:
How to access javascript variable value by creating another variable via concatenation?

Trong PHP tôi có thể có:

$theVariable = "bigToe"; 
$bigToe = "is broken"; 

ví dụ rằng:

echo "my ".$theVariable." ".$$theVariable; 

sẽ hiển thị

my bigToe is broken 

Tôi sẽ làm gì tương tự như trong JavaScript?

+1

Xem: http://stackoverflow.com/questions/993013/how-to-access-javascript-variable-value-by-creating- khác-biến-qua-concaten –

+1

Bạn muốn được tốt hơn bằng cách sử dụng một mảng kết hợp cho rằng trong PHP, hoặc một đối tượng trong JavaScript. – JAL

+0

@Code Duck: Có những trường hợp hữu ích. –

Trả lời

1

Đơn giản chỉ cần

eval("variableName") 

Mặc dù bạn phải chắc chắn rằng bạn biết giá trị chính xác evaling của bạn vì nó có thể được sử dụng để tiêm kịch bản nếu bạn đang đi qua nó nội dung không tin cậy

+1

Bạn chắc chắn không nên sử dụng eval –

+1

@Fabien: Tôi biết rằng eval có một số lượng lớn các rủi ro bảo mật, tôi thậm chí còn nhận xét rõ ràng về hiệu ứng đó. Điều đó nói rằng cách duy nhất để đạt được những gì được yêu cầu là eval, nói rằng "bạn chắc chắn không nên sử dụng eval" ngụ ý rằng câu trả lời của tôi nên có được "nó không thể" mà rõ ràng là sai. – olliej

1

Một cách là sử dụng chức năng eval

var theVariable = "bigToe"; 
var bigToe = "is broken"; 
console.log('my '+theVariable+' '+eval(theVariable)); 

Một cách khác là sử dụng các đối tượng window, mà giữ cặp khóa-giá trị cho mỗi biến toàn cầu. Nó có thể được truy cập dưới dạng mảng:

var theVariable = "bigToe"; 
var bigToe = "is broken"; 
console.log('my '+theVariable+' '+window[theVariable]); 

Cả hai phương thức đều in câu trả lời cho bảng điều khiển Firebug.

+2

tùy chọn "cửa sổ" là tốt nhất. Nếu var của bạn không nằm trong phạm vi toàn cục (ví dụ được khai báo trong hàm), bạn nên thay thế "cửa sổ" bằng "this" hoặc tên đối tượng chứa –

+1

@Fabien: nếu var không nằm trong phạm vi toàn cục, thì sử dụng 'this' làm tiền tố sẽ không giúp bạn - lý do duy nhất 'cái này' và 'cửa sổ' thường hoán đổi cho nhau là bởi vì 'cái này' luôn là đối tượng toàn cục khi hàm được gọi mà không có cơ sở và cửa sổ chỉ là một bí danh đối tượng toàn cầu đó. – olliej

3

tôi sẽ sử dụng window mảng thay vì eval:

var bigToe = "big toe"; 
window[bigToe] = ' is broken'; 
alert("my " + bigToe + window[bigToe]); 
+0

Tại sao bạn thích cửa sổ [] trên eval()? – baiano

+1

@baiano: Loại bỏ mọi lo ngại về bảo mật được giới thiệu với việc sử dụng 'eval', cộng với việc tham khảo từ điển là * luôn * nhanh hơn sau đó đánh giá Javascript chỉ để tạo giải pháp. –

+0

@baiano - đơn giản là vì tôi luôn có xu hướng tránh sử dụng 'eval' nếu tôi có thể giúp nó. Xem http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea – karim79