可能重复:
JavaScript “For …in” with ArraysJavascript为什么FOR IN是一种不好的做法?
人们总是告诉我,您对在是不好的做法,请你能告诉我为什么吗?为什么更好地使用我?
我总是喜欢用FOR,因为我使用PHP太,我使用foreach
了很多,这非常类似于在JavaScript的:)
可能重复:
JavaScript “For …in” with ArraysJavascript为什么FOR IN是一种不好的做法?
人们总是告诉我,您对在是不好的做法,请你能告诉我为什么吗?为什么更好地使用我?
我总是喜欢用FOR,因为我使用PHP太,我使用foreach
了很多,这非常类似于在JavaScript的:)
坏的做法是不明白之间的区别列举过一个数组对象和在其上迭代。否则for...in
循环是非常好的工具。有大的内部差异,但我会尝试在实际的方式来解释:
语法是:for (string in object)
,其中object
是Object
一个实例(和,自然,任其后代)和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
来得方便!
参见大卫·汉弗莱的帖子[遍历JavaScript中快速对象(http://vocamus.net/dave/?p=1205) - 对数组的是慢得多。 – 2010-11-25 02:21:01