2019
TL;DR
eval
Operator kann String-Ausdrücke in dem Kontext ausführen, den er aufgerufen hat, und Variablen aus diesem Kontext zurückgeben;
literal object
Theoretisch kann man das durch Schreiben erreichen: {[varName]}
aber sie ist per Definition blockiert.
Ich stoße also auf diese Frage und alle hier spielen nur herum, ohne eine wirkliche Lösung zu bringen. Aber @Axel Heider hat einen guten Ansatz.
Die Lösung lautet eval
. fast die meisten vergessen Betreiber. (denken die meisten ist with()
)
eval
Operator kann einen Ausdruck dynamisch in dem Kontext ausführen, in dem er aufgerufen wurde. und das Ergebnis dieses Ausdrucks zurückgeben. Wir können dies verwenden, um den Wert einer Variablen dynamisch im Kontext der Funktion zurückzugeben.
Beispiel:
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
Beachten Sie, dass ich immer explizit den Ausdruck eval
laufen wird. Um unnötige Überraschungen im Code zu vermeiden. eval
ist sehr stark Aber ich bin sicher, das wissen Sie bereits.
Übrigens, wenn es legal wäre, könnten wir die literal object
um den Variablennamen und den Wert zu erfassen, aber wir können keine berechneten Eigenschaftsnamen und Eigenschaftswerte kombinieren, die Kurzschrift ist leider ungültig
functopn example( varName ){
var var1 = 'foo', var2 ='bar'
var capture = {[varName]}
}
example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`