javascript是否保证两次枚举同一个对象会以相同的顺序遍历字段?

时间:2016-03-08 21:07:07

标签: javascript

使用for .. in循环迭代对象的成员时,枚举顺序为is implementation defined。但是,假设对象没有被修改,在相同的页面访问期间在相同的浏览器中迭代两次,保证给出相同的顺序?

以下是测试我正在谈论的属性的示例代码。问题归结为浏览器是否可能抛出“不一样”:

a = []
b = []
for (var e in obj)
    a.push(e);
for (var e in obj)
    b.push(e);

// Are a and b's contents now the same?
// Or is the same-ness implementation defined?
for (var i = 0; i < a.length; i++)
  if (a[i] !== b[i])
    throw "not the same";

我对现有浏览器的规范和实践都很感兴趣。

要明确,我不是在问whether the order is consistent across browsers 。我问的是,在单次访问网页的上下文中以及当对象未被修改时,订单在同一对象的多个枚举中是否一致。

1 个答案:

答案 0 :(得分:2)

没有。正如文档所说,它依赖于实现。如果没有修改,实现将以不同的顺序返回相同的对象 ,但是不能保证。

另一方面,Set object将按照插入顺序&#34;迭代其元素&#34;。