Javascript数组迭代使用for..in,包括MooTools
我在MooTools中迭代一个数组,但在循环中使用缩写Javascript数组迭代使用for..in,包括MooTools,javascript,mootools,for-in-loop,Javascript,Mootools,For In Loop,我在MooTools中迭代一个数组,但在循环中使用缩写for。当我使用常规的for循环时,它工作正常。这是MooTools污染全局名称空间的问题还是我在这里做错了什么 有一个createTabs()函数,它迭代数组并为数组中的每个值创建一个选项卡: function createTabs() { var myTabs = [["First", "a.png"], ["Second", "b.png"]]; for(var i in myTabs) { var ta
for。当我使用常规的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)
的输出:
我了解前两个索引,但其余的索引来自哪里
编辑:感谢您快速回答Chetan和k Prime。这是有道理的,数组。MooTools的每个
添加都是更干净的迭代方式
现在看起来好多了:
myTabs.each(function(item) {
var tab = new Tab(item[0], item[1]);
console.log(item);
});
for..in
不适用于数组迭代。它迭代对象的所有非内置属性。由于MooTools向Array prototype添加了更多函数,因此它们现在也是数组属性。看到这个了吗
只需在数组迭代中使用基本for循环。正如Chetan指出的,
for。。in
用于对象属性迭代,而不是数组。但是,通过使用hasownproperty
,可以迭代当前成员(而不是MooTools设置的继承成员),如下所示:
for (i in array)
if (array.hasOwnProperty(i))
{
//.. do stuff ...
}
或者,更好的是,因为您使用的是MooTools,所以只需使用数组即可。每个方法:
array.each (function (item, index)
{
// ... do stuff ...
});
应该指出的是,基于函数的迭代(例如:array.each
)比正常的<代码>for<代码>或<代码>for..要慢得多。请注意,每个都将是标准的浏览器功能,只要ECMA和mootools在为基于forEach to的函数定义别名时检查是否有本机支持。每个-因此性能下降只是暂时的,主要影响较旧的浏览器。我仍然不推荐使用。。。除非您需要阵列密钥,否则将使用阵列漫游(但这仍然是一种黑客攻击)
array.each (function (item, index)
{
// ... do stuff ...
});