for (var name in ['dog','cat','cow']) {
alert(name);
}
name
这里是返回数组的索引,但我不能引用它,因为它是匿名的。
我知道我可以在循环之外声明它,但是我在这里问是否有一种方法可以直接引用没有索引的名称。
答案 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)
数组方法forEach
,map
,filter
等将遍历文字数组的索引:
['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
}