【发布时间】:2011-05-14 17:56:08
【问题描述】:
人们总是告诉我使用 FOR IN 是一种不好的做法,请你告诉我为什么?为什么与 i 一起使用更好?
我一直喜欢使用 FOR IN,因为我也使用 PHP,我经常使用 foreach,它与 JavaScript 中的 FOR IN 非常相似 :)
【问题讨论】:
标签: javascript
人们总是告诉我使用 FOR IN 是一种不好的做法,请你告诉我为什么?为什么与 i 一起使用更好?
我一直喜欢使用 FOR IN,因为我也使用 PHP,我经常使用 foreach,它与 JavaScript 中的 FOR IN 非常相似 :)
【问题讨论】:
标签: 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 派上用场了!
【讨论】: