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()ユーザー入力を開始すると、事態は厄介になり始めます。

ただし、配列をお勧めします。だからあなたはこれをすることができます:

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 に答える