JS for in 顺序

2017-08-21 17:04 热度: 224 我说呢

其实是上周的事情,拖延症犯了,谁也挡不住啊

var obj = {
    city: 'beijing',
    12: 12,
    7: 7,
    0: 0,
    '-2': -2,
    age: 15,
    '-3.5': -3.5,
    7.7: 7.7,
    _: __,
    online: true,
    3: 3,
    23: 23,
    44: 44
}

for (var key in obj){
    console.log(key);
}

至于结果我就不显示了,自己直接放到控制台里面看下就明白了

来来来,总结下。。

结论

1.Chrome、 sarari、 firebox、 Opera 中使用 for-in 语句遍历对象属性时会遵循一个规律,它们会先提取所有 key 的 parseFloat 值为非负整数的属性, 然后根据数字顺序对属性排序首先遍历出来,然后按照对象定义的顺序遍历余下的所有属性。order is preserved with the major exception of keys like “7” that parse as integers and are handled differently by Chrome/V8

2.其它浏览器则完全按照对象定义的顺序遍历属性。

3.for-in、object.keys(objectX).map 语句无法保证对象的遍历顺序,应尽量避免编写依赖对象属性顺序的代码。

Chrome等现代浏览器较新版本 的 JavaScript 解析引擎遵循的是新版 ECMA-262 第五版规范(看到11年stackoverflow上的讨论)。因此,使用 for-in 语句遍历对象属性时遍历书序并非属性构建顺序。而 IE6 IE7 IE8 Firefox Safari 的 JavaScript 解析引擎遵循的是较老的 ECMA-262 第三版规范,属性遍历顺序由属性构建的顺序决定。

查看评论 (1条)

1 楼 及时雨

2017-08-21 17:06

终于等到你。。

添加评论