我看到一個關於...的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