动态组装var

时间:2013-07-25 12:40:46

标签: javascript

如何在没有eval的情况下在运行时组装Javascript中的var?

var lc = $('.bezeichnung-1').length;
for (var lt = 1; lt <= lc; lt++) {
    eval("var neuerwert"+lt+"=0;"); // this works but I don't want to use it because I read that eval is bad
}


var lc = $('.bezeichnung-1').length;
for (var lt = 1; lt <= lc; lt++) {
    window["var neuerwert"+lt] = 0; // this does not work
}

3 个答案:

答案 0 :(得分:7)

  

如何在没有eval的情况下在运行时组装Javascript中的var?

你没有,但你可以把它变成某种东西。

如果这些已经在全球范围内,那么它们已经是属性:

var lc = $('.bezeichnung-1').length;
for (var lt = 1; lt <= lc; lt++) {
    window["neuerwert"+lt] = 0;
    // -----^ no `var` keyword
}

如果它们不在全球范围内(对你有用!),请将它们作为对象的属性,例如:

var neuerwert = {
    1: /*...value here...*/,
    2: /*....value here...*/
};

或数组

var neuerwert = [
    /*...value here...*/,
    /*....value here...*/
];

然后

var lc = $('.bezeichnung-1').length;
for (var lt = 1; lt <= lc; lt++) {
    neuerwert[lt] = 0;
}

请注意,数组索引从0开始,因此如果您使用的是数组,则可能需要调整lt

答案 1 :(得分:0)

您正在尝试使用var,您应该使用我相信的数组

var lc = $('.bezeichnung-1').length;
var neierwert = ();

for (var lt = 1; lt <= lc; lt++) {
    neuerwert[lt]=0; 
}

答案 2 :(得分:0)

eval只有在你传递一个你从外面拿来的参数时才会很糟糕。

function badEvalExample(varName, varValue) {
    eval("var " + varName + " = " + varValue);
}

在这种情况下,该功能容易受到不稳定/恶意参数的攻击。你的例子完全没问题,尽管T.J.克劳德的window["neuerwert" + lt]解决方案确实更优雅。

但是,我建议不要使用something1something2等变量名称。如果需要相同类型的变量列表,那么最好将它们存储在数组中: somethings[0]somethings[1],...

我认为使用eval的正确措辞不是它是坏的而是通常应该尽可能地避免