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

Ada*_*dam 8 javascript

可能重复:
JavaScript"For ... in"with Arrays

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

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

Fre*_*ing 10

不好的做法是不明白之差列举了一个多阵列对象,并迭代过它.否则for...in循环是很好的工具.有很大的内部差异,但我会尝试以实际的方式解释:

语法是:for (string in object),其中objectObject(并且,当然,它的任何后代)的实例,并且stringvar 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]);
Run Code Online (Sandbox Code Playgroud)

但根本没有任何意义.此外,请注意上面的括号表示法[].这是一种成员运算符,不能与数组元素访问混淆.首先需要类型的操作数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派上用场了!

进一步阅读

  • 另请参阅David Humphrey的帖子[快速浏览JavaScript中的对象](http://vocamus.net/dave/?p=1205) - 对于数组而言,它要慢得多. (2认同)