2019
TL; DR
eval
operatör dize ifadesini çağrıldığı bağlamda çalıştırabilir ve bu bağlamdan değişkenler döndürebilir;
literal object
teorik olarak bunu yazma yoluyla yapabilir: {[varName]}
ancak tanım gereği engellenmiştir.
Bu soruya rastlıyorum ve buradaki herkes gerçek bir çözüm getirmeden oynar. ama @Axel Heider iyi bir yaklaşıma sahip.
Çözüm eval
. neredeyse en unutulan operatör. (çoğu kişinin olduğunu düşünüyorum with()
)
eval
işleci ifadeyi çağrıldığı bağlamda dinamik olarak çalıştırabilir. ve bu ifadenin sonucunu döndürür. bunu fonksiyonun bağlamında bir değişkenin değerini dinamik olarak döndürmek için kullanabiliriz.
misal:
function exmaple1(){
var a = 1, b = 2, default = 3;
var name = 'a';
return eval(name)
}
example1() // return 1
function example2(option){
var a = 1, b = 2, defaultValue = 3;
switch(option){
case 'a': name = 'a'; break;
case 'b': name = 'b'; break;
default: name = 'defaultValue';
}
return eval (name);
}
example2('a') // return 1
example2('b') // return 2
example2() // return 3
Her zaman açıkça ifade eval
çalışacağını unutmayın. Kodda gereksiz sürprizlerden kaçınmak için. eval
çok güçlü
ama eminim ki zaten biliyorsun
BTW, yasal olsaydı literal object
, değişken adını ve değerini yakalamak için kullanabilirdik , ancak hesaplanan özellik adlarını ve özellik değerini kısaca birleştiremiyoruz, ne yazık ki geçersiz
functopn example( varName ){
var var1 = 'foo', var2 ='bar'
var capture = {[varName]}
}
example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`