人们总是告诉我,使用FOR IN是一种不好的做法,请你告诉我为什么?为什么最好与i一起使用?
我总是喜欢使用FOR IN,因为我在使用foreach
的地方也使用了PHP,它与javascript中的FOR IN非常相似:)
答案 0 :(得分:9)
不好的做法是不理解枚举对数组对象和迭代之间的区别。否则for...in
循环是很好的工具。内部存在很大差异,但我会尝试以实际的方式解释:
语法是:for (string in object)
,其中object
是Object
的实例(当然,它的任何后代)和string
var接收属性名称{{ 1}}在每个循环迭代上。但是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
与数组一起使用。
顺便说一句,JavaScript 对象与PHP的关联数组(哈希表,如果你坚持正确的术语)类似。语法是for (var number = 0; number < array.length; number++)
。这里var object = {string:value,anotherName:moreStuff}
很方便!