Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组迭代使用for..in,包括MooTools_Javascript_Mootools_For In Loop - Fatal编程技术网

Javascript数组迭代使用for..in,包括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

我在MooTools中迭代一个数组,但在循环中使用缩写
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 ...
});