包含MooTools的for..in的Javascript数组迭代

Anu*_*rag 4 javascript mootools for-in-loop

我遍历在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出console.log(i):

0
1
$family
each
clean
associate
link
contains
extend
getLast
getRandom
include
combine
erase
empty
flatten
hexToRgb
rgbToHex
toJSON
Run Code Online (Sandbox Code Playgroud)

我理解前两个索引,但其余的来自哪里?

编辑:感谢Chetan和k Prime的快速回答.这是有道理的,Array.eachMooTools 的添加是更加清晰的迭代方式!

现在看起来好多了:

myTabs.each(function(item) {
    var tab = new Tab(item[0], item[1]);
    console.log(item);
});
Run Code Online (Sandbox Code Playgroud)

K P*_*ime 9

正如Chetan指出的那样,for .. in意味着对象属性迭代,而不是数组.但是,您可以通过使用迭代当前成员(而不是MooTools设置的继承成员)hasOwnProprty,如下所示:

for (i in array)
    if (array.hasOwnProperty(i))
    {
        //.. do stuff ...
    }
Run Code Online (Sandbox Code Playgroud)

Orr,更好的是,因为你正在使用MooTools,只需使用Array.each方法:

array.each (function (item, index)
{
    // ... do stuff ...
});
Run Code Online (Sandbox Code Playgroud)


Che*_*try 6

for..in不适用于数组迭代.它迭代非内置对象的所有属性.由于MooTools为Array原型添加了更多功能,因此它们现在也是数组属性.请参阅https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Statements/For...in

只需使用一个基本的for循环进行数组迭代.