for... in遍历的顺序

虽然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])

 参考:http://w3help.org/zh-cn/causes/SJ9011

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页