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 objectteorik 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())
evaliş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 }`