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

rsk*_*k82 8 javascript arrays loops

for (var name in ['dog','cat','cow']) {
  alert(name);
}
Run Code Online (Sandbox Code Playgroud)

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

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

got*_*top 13

...没有.没有,至少没有原生循环.然而,有,ES5的的forEach:

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

这实际上是一样的.它在大多数地方都受到支持,除了在旧的IE中:例如es5-shim之类的东西,即使在这样的旧浏览器中也能启用ES5方法.


Lui*_*rez 6

你有几个选择.

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

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

如果您不使用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);
});
Run Code Online (Sandbox Code Playgroud)

如果你不想创建一个函数,你总是可以做这样的疯狂:(不推荐)

for (var name in { 'dog' : '','cat' : null,'cow' : null }) {
    alert(name);
}
Run Code Online (Sandbox Code Playgroud)


bul*_*ley 5

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

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

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

  • 我的意思是,当我看到`name`时,我希望它是一个字符串,而不是一个整数. (4认同)
  • `arr ++`,真的吗?另外,使用`name`作为数组索引 - **坏**选择,恕我直言. (2认同)