Javascript数组迭代使用for..in与包括MooTools的
-
19-09-2019 - |
题
我遍历在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个索引,但其中剩余部分来自?
修改:感谢您的快速解答扯谈和k总理。这是有道理的,并且Array.each
除了通过MooTools是迭代更清洁的方式!
现在看起来好了很多:
myTabs.each(function(item) {
var tab = new Tab(item[0], item[1]);
console.log(item);
});
解决方案
for..in
并不意味着对阵列迭代。它遍历未内置对象的所有属性。由于MooTools的添加了更多功能,以阵列原型,他们现在阵列属性为好。看到这个 https://developer.mozilla.org/En/Core_JavaScript_1 .5_Reference /语句/对于...在
只需使用一个基本的for循环阵列迭代。
其他提示
正如阿赫亚指出,for .. in
是为对象属性的迭代,而不是阵列。然而,可以通过使用hasOwnProprty
,像这样遍历当前成员(而不是继承的成员通过MooTools的设定)时,:
for (i in array)
if (array.hasOwnProperty(i))
{
//.. do stuff ...
}
奥尔,更好的是,由于您使用MooTools的,只需使用Array.each
方法:
array.each (function (item, index)
{
// ... do stuff ...
});
不隶属于 StackOverflow