2010-07-30 19 views
5

Bir değişkene başvuru göndermeye çalışıyorum ve sonra içeriği javascript'te güncelliyorum, bu mümkün mü? Örneğin, bir basit (başarısız) örnek ...Javascript'te referans olarak bir değişkene erişme

var globalVar = 2; 

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

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

Bu elbette işe yaramıyor mu?

cevap

4

Eval bir değer döndürmez.

Bu çalışacaktır:

window[target] = value; 

(ancak, sen, değişken adını geçiyoruz referansı geçmezken) storeThis kod zaten globalVar erişimi olan Bu durumda

+0

digitalfresh haklı, eval deyimi değerlendirilmesi içindir: Eğer gerçekten eval kullanmak istediğiniz, aşağıdaki kullanabilirsiniz d bir tane eval ("window." + target + "=" + value + ";") oluşturmak için; ama çok fazla özyinelemeden. – Ifi

+0

Evet, ama neden değerlendirme? Bu kesinlikle 'eval' uygun olan birkaç durumdan biri değildir. – jasongetsdown

+0

Bingo! Bir terapi çalıştıran hem LFI hem de DigitalFresh'e teşekkürler. –

3

bunu geçmesine gerek yoktur

Kişisel örnek ile aynıdır.

var globalVar = 2; 

function storeThis(value) { 
    globalVar = value; 
} 

storeThis(5); 

Tam olarak ne yapmaya çalışıyorsunuz?

Skaler javascript'te referans olarak alınamaz.

var myObj = { foo: 2 }; 
2

ise görülebileceği gibi,: sizin gibi Number type kullanabilir veya kendi nesne oluşturmak ya bunu gerekirse muhtemelen nee böylece

var globalVar = 2;

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

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

+0

Bu durumda, eğer "değer" bir dizgeyse, "eval()" bir değişken olarak (tek kelimeyse), geçersiz kodda (javascript'in anlamadığı birden fazla kelime varsa) veya ifade (geçerli bir javascript ifadesi ise). –

İlgili konular