wwa*_*waw 4 javascript for-loop enumeration object for-in-loop
我不记得在哪里,但我曾经看到它认为for..in循环可以按照实现者喜欢的任何顺序遍历元素,包括前向,后向,随机或每次执行for..in循环时前后交替.然而,在实践中,我不认为后者实际上是存在任何实现的情况.(虽然有一个浏览器,我们知道谁喜欢弄乱,所以你永远不会太确定,但我离题了.)
我的观点是虽然for..in在实践中测序中可能没有这么糟糕的偏差,但我想知道ECMAScript实现之间存在什么偏差(如果有的话).我想现在主要的是JScript,Chakra,Futhark,Carakan,JavascriptCore,SquirrelFish,V8,SpiderMonkey和TraceMonkey,仅供参考.
首先,这里是关于枚举顺序的规范的参考:
枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)未指定.枚举期间可以删除要枚举的对象的属性.如果删除枚举期间尚未访问的属性,则不会访问该属性.如果在枚举期间将新属性添加到要枚举的对象,则无法保证在活动枚举中访问新添加的属性.在任何枚举中不得多次访问属性名称.
我能想到的唯一一个是:
早期(可能是当前?)版本的IE会将枚举期间添加的新属性放置到枚举结束,以便当前运行时访问它们for-in
V8具有不同的枚举顺序,如此错误报告中所述,该报告已作为WorkingAsIntended关闭
var a = {"foo":"bar", "3": "3", "2":"2", "1":"1"};
Run Code Online (Sandbox Code Playgroud)
Firefox和V8中的测试显示不同的顺序.
这不是一个清单.当然可能会有更多.我认为@Pointy的评论总结了这一点.没有保证.即使您有一个可靠地以一致方式枚举的对象,这并不意味着它将在下一个版本升级时执行此操作.使用工具来指明它们的工作方式,而不是仅仅看起来有效.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |