【问题标题】:Iteration order of for..in loops in JavascriptJavascript中for..in循环的迭代顺序
【发布时间】:2009-06-10 14:48:19
【问题描述】:

假设我有一个已初始化的 Javascript 对象

var letters = {q:0, t:0, o:0, b:0, y:0, n:0, u:0, m:0, p:0, 
               w:0, a:0, d:0, k:0, v:0, c:0, z:0, l:0, j:0, 
               i:0, e:0, g:0, s:0, x:0, r:0, h:0, f:0};

然后我想遍历这个对象的键

for(var letter in letters) {
    // code goes here
}

在 Firefox 3 和 Internet Explorer 8 中,对象按照它们在对象声明中列出的顺序(q、t、o、b、y 等)进行迭代。

我可以依靠这个吗?假设我在迭代之前不以任何方式修改我的对象。它是 ECMAScript 标准的一部分吗?有谁知道哪些浏览器按照声明的顺序进行迭代?

【问题讨论】:

标签: javascript


【解决方案1】:

不,不能依赖,至少not in Firefox

for...in 循环以任意顺序迭代对象的属性。

【讨论】:

  • 其实在 Firefox 中你可以依赖这个,但在 Chrome 中不行;见stackoverflow.com/questions/280713/…
  • 您不应依赖任何浏览器中的可重现顺序。该顺序由当前实现给出,但可能随时更改。 Mozilla 的链接文档确实明确地调用了任意顺序。
【解决方案2】:

不保证订单。有关更多信息,请参阅此 SO 问题:Iterate over a Javascript associative array in sorted order

【讨论】:

    【解决方案3】:

    为确保在 for-in 循环中处理对象属性的特定顺序,您需要为对象定义排序顺序或列表方法。如果你在创建对象的时候定义了所有的属性,一个属性名数组就可以了,但是如果你可以添加或删除属性,就需要一个方法。

    如果出于某种原因处理顺序是必不可少的,则数组可能更可取。

    【讨论】:

      【解决方案4】:

      顺序在规范中定义为“任意”,所以不;你不应该依赖于确定的顺序。

      【讨论】:

        【解决方案5】:

        不,你不应该依赖这个。

        【讨论】:

          猜你喜欢
          • 2015-06-11
          • 2010-09-21
          • 2016-11-27
          • 1970-01-01
          • 2015-11-04
          • 2011-09-17
          相关资源
          最近更新 更多