我在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
我理解前两个索引,但其余的来自哪里?
编辑:感谢Chetan和k Prime的快速回答。这是有道理的,而MooTools的Array.each
添加是更清晰的迭代方式!
现在看起来好多了:
myTabs.each(function(item) {
var tab = new Tab(item[0], item[1]);
console.log(item);
});
答案 0 :(得分:9)
正如Chetan所指出的那样,for .. in
用于对象属性迭代,而不是数组。但是,您可以使用hasOwnProprty
迭代当前成员(而不是MooTools设置的继承成员),如下所示:
for (i in array)
if (array.hasOwnProperty(i))
{
//.. do stuff ...
}
Orr,更好的是,因为您使用的是MooTools,只需使用Array.each
方法:
array.each (function (item, index)
{
// ... do stuff ...
});
答案 1 :(得分:6)
for..in
不适用于数组迭代。它迭代非内置对象的所有属性。由于MooTools为Array原型添加了更多功能,因此它们现在也是数组属性。见https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Statements/For...in
只需使用基本for循环进行数组迭代。