数组中的javascript for-in循环

时间:2013-04-01 01:55:18

标签: javascript

如果代码是这样的:

arr=Array("a","b","c");
for(i in arr);
{
 alert(i);
}

没有任何警报,但如果是这样的话:

arr=new Array("a","b","c");
for(i in arr)
{
 alert(i);//alerts 0,1,2
}

是什么原因?

2 个答案:

答案 0 :(得分:3)

Array是一个构造函数。要创建一个新对象,您应该使用new运算符来创建对象,然后绑定构造函数并对其进行运行。但在这种情况下,它实际上应该以任何一种方式工作,您的问题很可能与您的for循环旁边的分号有关,如注释中所述。

另外,为了创建一个新数组,通常建议使用更简单的表示法

var arr = ["a","b","c"];

在javascript中使用带有数组的for-in循环也是有问题的,因为这将触及在数组上定义的任何其他属性。 (所以如果你说arr.x = 2它也会迭代x

最好使用迭代形式

var i =0, length =arr.length;
for ( ;i<length; i++) {

    alert(arr[i]);
}

答案 1 :(得分:1)

您获得不同结果的原因是您使用了错误的for / in循环语法。

for(i in arr);
{
 alert(i);
}

不应该有第一个分号。

另请注意,迭代数组的更好方法是:

arr.forEach(function(value, index){
    alert(value); // or alert(index);
});

正如bfavaretto所说。

调用不带new关键字的Array函数将创建并返回一个新的Array对象,就像使用new关键字一样。

所以这两个人会提醒同样的事情:

arr1 = new Array("a","b","c");
arr2 = Array("a","b","c");