0

如何在运行时在没有 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
}
4

3 回答 3

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

于 2013-07-25T12:42:31.487 回答
0

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

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

for (var lt = 1; lt <= lc; lt++) {
    neuerwert[lt]=0; 
}
于 2013-07-25T12:45:27.997 回答
0

eval仅在您将其从外部获取的论点传递给它的情况下才不好。

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

在这种情况下,该函数容易受到不稳定/恶意参数的影响。您的示例非常好,尽管 TJ Crowder 的window["neuerwert" + lt]解决方案确实更优雅。

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

我认为使用的正确措辞eval并不是不好,而是应该尽可能长时间地避免使用

于 2013-07-25T12:52:33.350 回答