Javascript为什么FOR IN是一个不好的做法?

时间:2010-11-23 21:17:41

标签: javascript

  

可能重复:
  JavaScript “For …in” with Arrays

人们总是告诉我,使用FOR IN是一种不好的做法,请你告诉我为什么?为什么最好与i一起使用?

我总是喜欢使用FOR IN,因为我在使用foreach的地方也使用了PHP,它与javascript中的FOR IN非常相似:)

1 个答案:

答案 0 :(得分:9)

不好的做法是不理解枚举数组对象迭代之间的区别。否则for...in循环是很好的工具。内部存在很大差异,但我会尝试以实际的方式解释:

语法是:for (string in object),其中objectObject的实例(当然,它的任何后代)和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}很方便!

Further reading