循环遍历数组时,我的结果令人困惑。
填充数组看起来像
var tables = [];
// ...
// t is table as jQuery object
tables[t.attr('id')] = t;
稍后,当循环遍历tables数组时,我得到的元素比我实际添加的元素多一个。当另一个对象到达t.removeClass()
时,程序会中断for (t in tables) {
var t = tables[t];
t.removeClass(...);
}
Visual Studio Debugger将另一个对象描述为“clone”,这是原型对象/属性(?)的第一个方法。
tables
[prototype]
[Methods]
clone
...
[prototype]
MyTable0
MyTable1
我已经读过,每个javascript对象都带有一个prototype属性,但为什么原型在这里被视为一个对象?
答案 0 :(得分:1)
注意:如果您的ID不是数字,那么您不需要数组,请查看其他答案。
要遍历数组,请不要使用for..in
构造。
使用
for (var i=0; i<tables.length; i++) {
var t = tables[i];
t.removeClass(...);
}
或者如果您不关心IE8:
tables.forEach(function(t) {
t.removeClass(...);
});
或使用jQuery:
$.each(tables, function(_,t){
t.removeClass(...);
});
旁注:看起来有人很难丰富原生Array类的原型。这是generally seen as bad practice。这样做和使属性可枚举更糟糕。您应该考虑删除或修复您使用的库。
答案 1 :(得分:0)
您对表格的声明应该是:
var tables = {};