4

MooToolsで配列を反復処理していますが、短縮for..inループを使用して配列を反復処理すると、追加の項目が表示されます。通常のforループを使用すると正常に動作します。これはMooToolsがグローバル名前空間を汚染する問題ですか、それともここで何か間違ったことをしていますか?

createTabs()配列を反復処理し、配列内の値ごとにタブを作成する関数があります。

function createTabs() {
    var myTabs = [["First", "a.png"], ["Second", "b.png"]];
    for(var i in myTabs) {
        var tab = new Tab(myTabs[i][0], myTabs[i][1]);
        console.log(i);
    }
}

これは次の出力ですconsole.log(i)

0
1
$family
each
clean
associate
link
contains
extend
getLast
getRandom
include
combine
erase
empty
flatten
hexToRgb
rgbToHex
toJSON

最初の2つのインデックスは理解していますが、残りはどこから来ているのでしょうか。

編集:ChetanとkPrimeのクイックアンサーに感謝します。それは理にかなっており、Array.eachMooToolsによる追加は反復するためのはるかにクリーンな方法です!

今はずっと良く見えます:

myTabs.each(function(item) {
    var tab = new Tab(item[0], item[1]);
    console.log(item);
});
4

2 に答える 2

9

Chetanが指摘したように、for .. in配列ではなく、オブジェクトプロパティの反復を目的としています。ただし、次のように使用することで、現在のメンバー(MooToolsによって設定された継承されたメンバーではない)を反復処理できますhasOwnProprty

for (i in array)
    if (array.hasOwnProperty(i))
    {
        //.. do stuff ...
    }

Orr、さらに良いことに、MooToolsを使用しているので、次のArray.each方法を使用してください。

array.each (function (item, index)
{
    // ... do stuff ...
});
于 2010-01-11T05:25:33.357 に答える
6

for..in配列の反復を目的としたものではありません。組み込みではないオブジェクトのすべてのプロパティを繰り返し処理します。MooToolsは配列プロトタイプにさらに多くの関数を追加したので、それらは配列プロパティにもなりました。このhttps://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Statements/For...inを参照してください

配列の反復には基本的なforループを使用するだけです。

于 2010-01-11T05:18:07.327 に答える