使用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 。我问的是,在单次访问网页的上下文中以及当对象未被修改时,订单在同一对象的多个枚举中是否一致。
答案 0 :(得分:2)
没有。正如文档所说,它依赖于实现。如果没有修改,实现将以不同的顺序返回相同的对象 ,但是不能保证。
另一方面,Set object将按照插入顺序&#34;迭代其元素&#34;。