虽然ECMAScript规定了对象的遍历顺序是由对象定义时属性的书写顺序决定的.(译者注:ES5已经对遍历机制做了调整,重新规定:属性遍历的顺序是没有被规定的), 大部分浏览器都依照这个规定,先添加的属性先被遍历(除了从原型上继承的属性)(译者注:Chrome和Opera已经遵循了ES5的新规定,具体请看). 但是, 在 Internet Explorer 中, 使用 delete
删除一个属性后, 奇怪的事情发生了,如果被删除的属性重新被添加,那么遍历时, 该属性的顺序会是上次删除前的那个位置所应该有的顺序,而不是出现在遍历的最后一个.
Chrome Opera 中使用 for-in 语句遍历对象属性时会遵循一个规律,它们会先提取所有 key 的 parseFloat 值为非负整数的属性, 然后根据数字顺序对属性排序首先遍历出来,然后按照对象定义的顺序遍历余下的所有属性。其它浏览器则完全按照对象定义的顺序遍历属性。
可用不同浏览器尝试以下代码:
var a = { 1:"a", 7:"b", 4:"c", 5:"d", "-3":"e", f:"f", "2.2":"g", 6:"h", 0:"i", "2" : "j" }; for(var i in a) alert(i + ": " + a[i])