如果代码是这样的:
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
}
是什么原因?
如果代码是这样的:
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
}
是什么原因?
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]);
}
您得到不同结果的原因是您为 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");