【问题标题】:Javascript why FOR IN is a bad practice? [duplicate]Javascript 为什么 FOR IN 是一种不好的做法? [复制]
【发布时间】:2011-05-14 17:56:08
【问题描述】:

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

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

我一直喜欢使用 FOR IN,因为我也使用 PHP,我经常使用 foreach,它与 JavaScript 中的 FOR IN 非常相似 :)

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    语法是:for (string in object),其中objectObject 的一个实例(当然还有它的任何后代),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 派上用场了!

    Further reading

    【讨论】:

    • 另请参阅 David Humphrey 的帖子 Iterating over Objects in JavaScript Quickly - 对于数组,它要慢得多。
    • @ChrisMorgan 链接已损坏
    • 在 JavaScript 中快速迭代对象现在位于 blog.humphd.org/vocamus-1205。但是当性能有问题时,请寻求更新的信息;十年对于 JavaScript 引擎开发来说是一段极其漫长的时间。
    猜你喜欢
    • 2010-11-09
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多