2010-11-23 105 views

回答

10

坏的做法是不明白之间的区别列举过一个数组对象在其上迭代。否则for...in循环是非常好的工具。有大的内部差异,但我会尝试在实际的方式来解释:

语法是:for (string in object),其中objectObject一个实例(和,自然,任其后代)和string VAR接收的属性名称每个循环迭代上的object。但Array也是Object后裔!所以,这是完全合法的使用:

var array = [0,1,2]; 
for (var property in array) 
    alert(typeof property + '\t' + property + '\n' + typeof array[property] + '\t' + array[property]); 

而只是是没有意义的可言。此外,请注意上面的支架符号[]。这是一种会员运算符的形式,不能与数组元素访问混淆。首先需要string类型的操作数和第二个 - number。让我们打破上面的例子,并使用var array = new Array(3)来创建数组。循环工作不再,但array.length == 3正确。

结论:使用for...in除了数组以外的任何对象。在数组中使用for (var number = 0; number < array.length; number++)

顺便说一句,JavaScript 对象与PHP的关联数组(哈希表,如果你坚持正确的术语)是相似的。语法是var object = {string:value,anotherName:moreStuff}。这里for...in来得方便!

Further reading

+2

参见大卫·汉弗莱的帖子[遍历JavaScript中快速对象(http://vocamus.net/dave/?p=1205) - 对数组的是慢得多。 – 2010-11-25 02:21:01