0

循环遍历数组时,我得到了令人困惑的结果。

填充数组看起来像

var tables = [];
// ...
// t is table as jQuery object
tables[t.attr('id')] = t;

稍后,当循环遍历表格数组时,我得到的元素比实际添加的元素多一个。当另一个对象到达 t.removeClass() 时程序中断

for (t in tables) {
    var t = tables[t];
    t.removeClass(...);
}

Visual Studio Debugger 将另一个对象描述为“克隆”,这是原型对象/属性(?)的第一个方法。

tables
    [prototype]
        [Methods]
            clone
            ...
        [prototype]
    MyTable0
    MyTable1

我读过每个 javascript 对象都带有一个原型属性,但为什么这里的原型被视为一个对象?

4

2 回答 2

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(...);
});

Side note : it looks like somebody poorly enriched the prototype of the native Array class. It's generally seen as bad practice. Doing so and making the property enumerable is even worse. You should consider dropping or fixing the library you use.

于 2013-10-21T07:33:20.143 回答
0

Your declaration for tables should be:

var tables = {};
于 2013-10-21T07:39:43.183 回答