javascript 是否保证枚举同一对象两次将以相同的顺序遍历字段
Does javascript guarantee that enumerating the same object twice will go over the fields in the same order?
当使用 for .. in
循环迭代对象的成员时,枚举顺序是实现定义的。但是,假设对象没有被修改,在同一个页面访问期间在同一浏览器中迭代它两次是否保证给出相同的顺序?
下面是测试我正在谈论的属性的示例代码。问题归结为浏览器是否可以抛出"不一样":
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";
我对根据规范和现有浏览器的实践的答案感兴趣。
需要明确的是,我不是在问顺序在浏览器之间是否一致。我问的是,在一次访问网页的上下文中,以及当对象未被修改时,顺序是否在同一对象的多个枚举中保持一致。
No.正如文档所述,它依赖于实现。如果不修改,实现不太可能以不同的顺序返回相同的对象,但无法保证。
另一方面,Set 对象将"按插入顺序迭代其元素"。
相关文章:
- 如何使用jquery将两个字段组合为下拉菜单中的选项
- Angularjs 通过选择不同选择框中的两个字段来填充选择框
- 使用Join,要求两个字段中的一个字段为非空
- 使用一个提交按钮验证两个字段
- 如何使用angular ui select过滤两个字段中的数据
- jQuery ui自动完成下拉列表中的两个字段
- Jquery使用PHP和MySQL基于一个字段自动完成两个字段
- 比较 angularjs 指令中的两个字段
- 如何根据返回的 Json 更新两个字段
- 当两个字段为空时如何显示错误消息 javascript/jquery.
- 比较两个字段的验证
- 如何对具有两个字段的对象进行排序
- 对对象的两个字段进行角度ng重复搜索
- 使用 Javascript 的 HTML 中两个字段之间的区别
- 懒惰.js如何选择两个字段的不同(uniq)
- jQuery 验证:验证一个字段或一对的两个字段是否为必填字段
- 如何对此 javascript 函数进行编码以在选择特定类型时显示两个 + 字段集
- 记住密码基于两个字段
- 匹配 JavaScript 中两个函数中表单中的两个字段
- 使两个字段的组合在我的收藏中独一无二