数组中in-loop的javascript

数组中in-loop的javascript,javascript,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 } 原因是什么?数组是构造函数。要创建新对象,您应该使用new操作符来创建对象,然后将构造函数绑定到该对象并对其运行。不过,在这种情况下,它实际上应该以任何一种方式工作,您的问题很可能与for循环旁边的分号

如果代码为:

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
}

原因是什么?数组是构造函数。要创建新对象,您应该使用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]);
}
var i=0,length=arr.length;

for(;i得到不同结果的原因是for/in循环使用了不正确的语法

for(i in arr);
{
 alert(i);
}
不应该有第一个分号

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

arr.forEach(function(value, index){
    alert(value); // or alert(index);
});
正如巴法雷托所提到的

在不使用
new
关键字的情况下调用Array函数将创建并返回一个新的数组对象,方法与使用
new
关键字相同

因此,这两个将提醒相同的事情:

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

for/in中的
{
前面不应该有
loop@David在Internet explorer中试用。我刚刚在chrome中测试过,第一次没有警报snippet@phihag用IE试试看,chrome中没有关于第一个代码段的警报,我只是尝试了itor
arr.forEach(函数(值){alert(值);})
。这确实是一种方法,但不是OP问题的原因。真正的原因是
for
语句后面的分号,结束了它。可以在不使用
new
的情况下调用数组构造函数,并且仍然会构造一个新数组(参见ES5)是的,在我最初的回答之后,我意识到了这一点。为了反映这一点,我修改了第一段,保留了答案,因为我仍然认为它对OP有用,而且对于注释来说有点冗长。在数组上不使用
for…in
的另一个原因是。如果你确实使用
for…in
来循环任何东西,数组或对象,你应该始终使用在每一处房产上都有销售。