我的问题是如何做到这一点,但我遇到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)
答案 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 "()"!