0

配列をループすると、混乱する結果が得られます。

配列の塗りつぶしは次のようになります

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

後で、tables 配列をループすると、実際に追加した要素よりも 1 つ多い要素を取得しています。他のオブジェクトが t.removeClass() に到達すると、プログラムが中断します

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

Visual Studio Debugger は、他のオブジェクトを "clone" と記述します。これは、プロトタイプ オブジェクト/プロパティ (?) の最初のメソッドです。

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

補足: 誰かがネイティブ Array クラスのプロトタイプを不十分に強化したようです。これは一般的に悪い習慣と見なされています。そうすること、プロパティを列挙可能にすることはさらに悪いことです。使用しているライブラリを削除または修正することを検討する必要があります。

于 2013-10-21T07:33:20.143 に答える