使用eval调用稍微不同的函数名称的替代方法?

时间:2012-12-05 21:22:16

标签: javascript

我的问题是如何做到这一点,但我遇到eval似乎有用。我被告知eval是邪恶的,为什么解释为什么我的头脑,所以我的问题是:

使用这样的eval或其他方法完全没有问题吗?

var condition1=false;
var condition2=true;
var condition3=false;
//etc

if (condition1){x = "1"}
else if (condition2){x = "2"}
else if (condition3){x = "3"};
//etc

var thing1= 11;
var thing2= 22;
var thing3= 33;
//etc

eval ("thing" + x)

3 个答案:

答案 0 :(得分:5)

可能最好的解决方案是用数组替换所有这些变量:

thing = [11, 22, 33 ...];

那么你可以这样做:

thing[x];  // either change your code to zero indexed or subtract 1 here

如果变量是全局变量,您也可以这样做:

window["thing"+x];

但理想情况下,你不希望这些是全球性的。

答案 1 :(得分:1)

您可以拥有一个名为things

的对象
var things = {
   "1": 11,
   "2": 22,
   "3": 33
}

然后你可以用

来引用一个东西
things[x]

答案 2 :(得分:0)

由于您自己构建的字符串为eval(),因此不存在任何真正的危险。当你开始eval()用户输入时,事情开始变得讨厌。

我建议使用数组。所以你可以这样做:

var conditions=[false, true, false];
for(var i=0;i<conditions.length;i++)
    if(condition[i])x=i+1; //i=0, 1, 2, ...; x=1, 2, 3, ...
eval("thing"+x+"()"); //don't forget the "()"!