2010-07-30 33 views
5

Tôi đang cố gắng chuyển một tham chiếu đến biến và sau đó cập nhật nội dung trong javascript, điều đó có khả thi không? Ví dụ: một ví dụ đơn giản (không thành công) sẽ là ...Truy cập biến bằng cách tham chiếu trong Javascript

var globalVar = 2; 

function storeThis (target, value) { 
    eval(target) = value; 
} 

storeThis('globalVar', 5); 
alert('globalVar now equals ' + globalVar); 

Điều này tất nhiên không hiệu quả, bất cứ ai có thể giúp đỡ?

Trả lời

4

Đánh giá không trả lại giá trị.

này sẽ làm việc:

window[target] = value; 

(tuy nhiên, bạn không được đi qua các tài liệu tham khảo, bạn đang đi qua tên biến)

+0

digitalfresh là đúng, eval là thẩm định tuyên bố, do đó bạn có thể nee d để tạo một ví dụ: eval ("cửa sổ". + mục tiêu + "=" + giá trị + ";"); nhưng becarefull của quá nhiều đệ quy. – Ifi

+0

Vâng, nhưng tại sao 'eval' ở tất cả? Điều này chắc chắn không phải là một trong số ít các tình huống mà 'eval' là thích hợp. – jasongetsdown

+0

Bingo! Cảm ơn bạn cả LFI và DigitalFresh, đã làm việc một điều trị. –

3

Trong trường hợp này mã trong storeThis đã có quyền truy cập vào globalVar nên không cần để vượt qua nó trong

mẫu của bạn là giống hệt nhau để:.

var globalVar = 2; 

function storeThis(value) { 
    globalVar = value; 
} 

storeThis(5); 

Chính xác thì bạn đang cố gắng làm gì?

Không thể chuyển số không bằng tham chiếu trong javascript. Nếu bạn cần phải làm điều đó, hoặc sử dụng Number type hoặc tạo đối tượng riêng của bạn như:

var myObj = { foo: 2 }; 
1

Cách tốt nhất là sử dụng một đối tượng, như có thể thấy here, hoặc here , hoặc here

2

Nếu bạn thực sự muốn sử dụng eval, bạn có thể sử dụng như sau:

var globalVar = 2;

function storeThis(target, value) { 
    eval(target + ' = ' + value); 
} 

storeThis('globalVar', 5); 
alert('globalVar now equals ' + globalVar); 

+0

Trong trường hợp này, nếu 'value' là một chuỗi, thì' eval() 'sẽ coi nó là một biến (nếu đó là một từ), mã không hợp lệ (nếu nó nhiều hơn một từ mà javascript không hiểu) hoặc biểu thức (nếu đó là biểu thức javascript hợp lệ). –

Các vấn đề liên quan