是否可以在for循环中引用匿名数组?

时间:2012-01-01 18:05:49

标签: javascript arrays loops

for (var name in ['dog','cat','cow']) {
  alert(name);
}

name这里是返回数组的索引,但我不能引用它,因为它是匿名的。

我知道我可以在循环之外声明它,但是我在这里问是否有一种方法可以直接引用没有索引的名称。

7 个答案:

答案 0 :(得分:13)

...没有。没有,至少没有原生循环。但是,有ES5的forEach

['dog', 'cat', 'cow'].forEach(function(value, key) {
  // do stuff
});

实际上是一样的。支持mostly everywhere,但在旧的IE中除外:例如es5-shim之类的东西,即使在这样的旧浏览器中也可以启用ES5方法。

答案 1 :(得分:5)

如果您知道数组的键将是整数,那么就没有必要使用for..in构造。

for (var arr = ['dog','cat','cow'], name = 0; name < arr.length; name++ ) {
  console.log(arr[ name ]);
}

在上面的代码中,一个更简单的for循环允许创建一个新对象并通过循环内的键引用。

答案 2 :(得分:5)

您有几种选择。

如果你使用的是jQuery,你可以这样做:

$.each(['dog','cat','cow'], function() {
    var name = this;
    alert(this);
});

如果您不使用jQuery,您可以创建自己的功能

function each(array, pFunction) {
    for(var i = 0; i < array.length; i++) {
        var element = array[i];
        pFunction(element);
    }
}

each(['dog','cat','cow'], function(name) {
    alert(name);
});

如果您不想创建一个功能,您可以随时做一些疯狂的事情:(不推荐)

for (var name in { 'dog' : '','cat' : null,'cow' : null }) {
    alert(name);
}

答案 3 :(得分:3)

如果数组是匿名的,则无法使用for in循环引用其元素。

答案 4 :(得分:3)

不,你不能这样做。它只显示索引。此外,JavaScript中的数组循环的是一种不好的做法。它将循环遍历所有数组对象方法。

答案 5 :(得分:2)

数组方法forEachmapfilter等将遍历文字数组的索引:

['dog', 'cat', 'cow'].forEach(alert);

为旧浏览器填充:

if(![].forEach){
    array.prototype.forEach= function(fun, scope){
        var T= this, L= T.length, i= 0;
        if(typeof fun== 'function'){
            while(i< L){
                if(i in T){
                    fun.call(scope, T[i], i, T);
                }
                ++i;
            }
        }
        return T;
    }
}

答案 6 :(得分:1)

你正在使用错误的语法结构。

for in用于枚举对象的属性,而不是用于迭代数组。在外面声明你的数组并使用常规循环。

var arr = ['dog', 'cat', 'cow'];
for(var i = 0; i < arr.length; i++) {
  // your code
}