Javascript for(var i=0;i<;a.length;i+;+;){与for(a中的var i){

Javascript for(var i=0;i<;a.length;i+;+;){与for(a中的var i){,javascript,for-loop,Javascript,For Loop,可能重复: 对于(aArray中的VarI)和(i=0;i不,这是不安全的,因为它们不是一回事 第一个循环迭代数值索引,直到.length属性中以数值顺序存储任何值为止 第二个枚举对象上的所有可枚举属性,包括原型属性,并且不保证任何顺序 以数组为例: var arr = ['a','b','c']; 现在向其构造函数的prototype对象添加一些内容: Array.prototype.sayHello = function() { alert('hi'); }; 如果您在语句中使用for,

可能重复:

对于(aArray中的VarI)和(i=0;i不,这是不安全的,因为它们不是一回事

第一个循环迭代数值索引,直到
.length
属性中以数值顺序存储任何值为止

第二个枚举对象上的所有可枚举属性,包括原型属性,并且不保证任何顺序

以数组为例:

var arr = ['a','b','c'];
现在向其构造函数的
prototype
对象添加一些内容:

Array.prototype.sayHello = function() { alert('hi'); };
如果您在语句中使用
for,那么最终将使用
sayHello
函数,而不仅仅是数字索引


如果您处理的对象除了索引之外没有可枚举属性,并且不关心顺序,那么我想这真的不重要,但正确的形式仍然是使用
for
语句。

否,因为(假设在第一个版本中您使用
I
来索引
a
)数组可以有非整数索引。因此,如果您有:

a = {1:1, 'f': 'hey'}
在第一个版本中,
i
将是
0
然后是
1
。您将首先尝试使用
0
索引
a
,但由于
0
不是有效的索引,因此无法返回任何内容,然后尝试使用
1
并获取“嘿”。因此您可以看出这显然是错误的

第二个将检查每个索引,无论它是什么

因此,第一个版本假设所有索引都是数字且按顺序排列,而第二个版本将迭代每个索引,无论它是什么。


当需要枚举数组的自然顺序时,将前者用于数组。当顺序不重要或不明确时,将后者用于对象。

Touche!我应该更具体一些。我的意思是在处理矩阵时。@Artur所说的矩阵是指数组数组,对吗?(因为JavaScript中没有内置的矩阵类型/类)是的!对不起,我指的是里面有数组的数组,或者我想是单层数组。@Artur Sapek:在这种情况下,不要在JavaScript中的数组上使用
for
for
语句是正确的。@patrick dw这就是我的意思,在我的代码中有几种情况下,它们都做相同的事情。如果我将DOM元素应用于数组中的arents:
x=[[parent1,child1],[parent2,child2]…]
,in
循环中的
for(entry in x){x[entry][0]。appendChild(x[entry][1]);}