当前,所有主流浏览器都按照定义它们的顺序遍历对象的属性。Chrome可以做到这一点,除了少数情况。[…]
ECMAscript规范明确未定义此行为。在ECMA-262中,第12.6.4节:枚举属性的机制……取决于实现。
但是,规范与实现完全不同。ECMAscript的所有现代实现都按照定义它们的顺序遍历对象属性。因此,Chrome小组认为这是一个错误,并将予以修复。
除了Chrome和Opera以外,所有浏览器都遵循定义顺序,而Chrome则对每个非数字属性名称都遵循。在这两种浏览器中,属性是按顺序拉到第一个非数字属性之前的(这与它们实现数组的方式有关)。顺序也相同
Object.keys。
此示例应清楚说明发生了什么:
var obj = { "first":"first", "2":"2", "34":"34", "1":"1", "second":"second"};for (var i in obj) { console.log(i); };// Order listed:// "1"// "2"// "34"// "first"// "second"它的技术性不如可能随时更改的事实重要。不要依赖保持这种状态的事物。
简而言之:如果顺序对您很重要,请使用数组。



