我看到一个关于...的iteration order的问题,并警告说订单不可信。内部完成当前和访问节点的迭代和跟踪过程,以及JavaScript引擎之间的差异如何?在JavaScript中如何实现?
3
A
回答
3
从the MDN documentation for for...in
(强调):
遍历对象,的以任意顺序的枚举的属性。
我确定JavaScript引擎的内部细节各不相同,甚至在任何特定引擎的版本中也是如此。我猜测在很多引擎中,它是通过某种哈希表实现完成的。由于哈希函数会随着哈希表的增长而对键重新排序,所以属性a
和b
的相对顺序可以通过添加新属性c
而改变,而不更改引擎或任何东西。
0
看来的Object.keys()
和Object.defineProperties
实施应模仿for...in
行为:
如果实现定义枚举的特定顺序对换的说法,同样的枚举顺序,必须在使用这个算法的第5步。
所以它们可以用作参考。
的delete
操作员还可以事复杂:
的力学和列举的属性顺序(在第一算法步骤6.A,在第二步骤7.A)没有被指定。在枚举过程中可能会删除枚举对象的属性。如果枚举过程中尚未访问的属性被删除,则不会被访问。如果在枚举过程中将新属性添加到枚举对象中,则新增属性不保证在活动枚举中被访问。任何枚举中的属性名称都不能被访问多次。
如可以命名在原型链冲突:
枚举一个对象的属性包括它的原型的枚举性质,并且原型的样机,等,递归;但是原型的属性如果被“隐藏”,则不会枚举,因为原型链中的某个以前的对象具有同名的属性。确定原型对象的属性是否被原型链上的前一个对象遮蔽时,不考虑[[Enumerable]]属性的值。
参考
相关问题
- 1. 如何在JavaScript中实现?
- 2. 如何实现在Javascript
- 3. 如何在CakePHP中实现JavaScript onmouseover?
- 4. 如何在HTML中实现此JavaScript
- 5. 如何在JavaScript中实现PBEWithMD5AndDES算法?
- 6. 我如何在WordPress中实现JavaScript?
- 7. 如何在JavaScript中实现TileWindows算法?
- 8. 如何在C#中实现Javascript的XmlHttpRequest?
- 9. 哈希表如何在JavaScript中实现
- 10. 如何在JavaScript中实现before_filter回调?
- 11. 如何在JavaScript中实现GROWTH函数
- 12. 如何在JavaScript中实现`使用`?
- 13. 如何在jQuery变量中实现JavaScript?
- 14. 如何在javascript中实现接口
- 15. 如何在JavaScript中实现地图?
- 16. 在JavaScript中如何实现无穷大?
- 17. 如何在V8中调试javascript实现
- 18. 如何在javascript中实现onclick对象?
- 19. 如何在JavaScript中实现部分类?
- 20. 如何在JavaScript中实现继承?
- 21. 如何在Javascript中实现内存块?
- 22. 如何在javascript中实现loopback CURL?
- 23. String.concat()如何在JavaScript中实现?
- 24. 如何在javascript中实现python的namedtuple
- 25. 在Javascript中实现
- 26. 如何在uiwebview中实现用于pdf文件实现的javascript?
- 27. 如何实现JavaScript继承
- 28. 如何实现javascript localStorage
- 29. 如何实现用JavaScript
- 30. 如何在Delphi中实现XIRR实现?
此相关帖子可能会提供一些见解 http://stackoverflow.com/questions/280713/elements-order-in-a-for-in-loop – lostsource