Javascript:为什么对数组使用for循环而不是for in循环?

Javascript:为什么对数组使用for循环而不是for in循环?,javascript,for-loop,for-in-loop,Javascript,For Loop,For In Loop,我一直在阅读Stoyan Stefanov的面向对象Javascript,他曾写道: for in循环用于迭代数组(或对象,我们将在后面看到)的元素。这是它唯一的用途;它不能作为通用重复机制来代替for或while。让我们看一个使用for in循环遍历数组元素的示例。但请记住,这只是为了提供信息,因为in中的for主要适用于对象,常规的for循环应该用于arrray 在过去迭代数组元素时,我总是使用for循环,我通常看到for循环不是for in循环用于此目的,但是“常规for循环应该用于数组”

我一直在阅读Stoyan Stefanov的面向对象Javascript,他曾写道:

for in循环用于迭代数组(或对象,我们将在后面看到)的元素。这是它唯一的用途;它不能作为通用重复机制来代替
for
while
。让我们看一个使用
for in
循环遍历数组元素的示例。但请记住,这只是为了提供信息,因为in中的
for主要适用于对象,常规的
for
循环应该用于arrray


在过去迭代数组元素时,我总是使用
for
循环,我通常看到
for
循环不是
for in
循环用于此目的,但是“常规
for
循环应该用于数组”的原因是什么(我想到原型)扩展数组类型,因此当您对in
循环使用
时,它会命中该数组上的所有
可枚举的
属性,其中包括数组的所有元素,但也包括所有添加到属性或方法上的属性。这不是您希望发生的


for i in
循环只在数组的元素上迭代,也就是说,任何您字面上定义为
[1,2,3,4]

的循环都会对数组使用常规
for
循环的原因是它将迭代限制为索引值


如果使用
for in
循环,它将迭代对象上的所有属性(数组是对象),如果将任意属性附加到没有数字索引的数组,则可能会产生意外结果。

我通常在不知道数组中元素的确切数目时使用它。通常,当数组动态或动态填充时,它用于迭代元素。

这没有意义,因为array-length始终可用于x.length。我的数组循环如下所示:for(var i=0,len=x.length;i可能的重复项