如何在没有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
}
答案 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]
解决方案确实更优雅。
但是,我建议不要使用something1
,something2
等变量名称。如果需要相同类型的变量列表,那么最好将它们存储在数组中: somethings[0]
,somethings[1]
,...
我认为使用eval
的正确措辞不是它是坏的而是通常应该尽可能地避免。