0

我的问题是如何做到这一点,但我遇到了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)
4

3 回答 3

5

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

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

那么你可以这样做:

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

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

window["thing"+x];

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

于 2012-12-05T21:24:41.940 回答
1

你可以有一个对象叫做things

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

然后你可以用

things[x]
于 2012-12-05T21:24:19.653 回答
0

由于您正在构建要eval()自己编写的字符串,因此不会涉及任何真正的危险。eval()当你开始'ing 用户输入时,事情开始变得糟糕。

我会推荐数组。所以你可以这样做:

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 "()"!
于 2012-12-05T22:16:27.080 回答