2019
TL;博士
eval
运算符可以在它调用的上下文中运行字符串表达式并从该上下文返回变量;
literal object
理论上可以通过 write: 来做到这一点{[varName]}
,但它被定义阻止了。
所以我遇到了这个问题,这里的每个人都只是玩弄,没有带来真正的解决方案。但是@Axel Heider 有一个很好的方法。
解决办法是eval
。几乎被遗忘的运营商。(认为大多数是with()
)
eval
运算符可以在它调用的上下文中动态运行表达式。并返回该表达式的结果。我们可以使用它在函数的上下文中动态返回变量的值。
例子:
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
请注意,我总是明确地写出表达式eval
将运行。避免代码中出现不必要的意外。eval
非常强大
但我相信你已经知道了
顺便说一句,如果它是合法的,我们可以literal object
用来捕获变量名称和值,但我们不能将计算的属性名称和属性值速记结合起来,遗憾的是,它是无效的
functopn example( varName ){
var var1 = 'foo', var2 ='bar'
var capture = {[varName]}
}
example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`