Skip to content

[js] 第421天 使用for-in语句能保证遍历对象的顺序吗?如果不能那为什么?如果可以那又如何保证? #2497

Open
@haizhilin2013

Description

@haizhilin2013

第421天 使用for-in语句能保证遍历对象的顺序吗?如果不能那为什么?如果可以那又如何保证?

3+1官网

我也要出题

Activity

zhaofeipeter

zhaofeipeter commented on Jul 24, 2020

@zhaofeipeter

Chrome Opera 的 JavaScript 解析引擎遵循的是新版 ECMA-262 第五版规范。因此,使用 for-in 语句遍历对象属性时遍历顺序并非属性构建顺序。而 IE6 IE7 IE8 Firefox Safari 的 JavaScript 解析引擎遵循的是较老的 ECMA-262 第三版规范,属性遍历顺序由属性构建的顺序决定。

如果我们需要按照一定的顺序输出属性,也可以先在一个数组中保存所有的key值,再将数组排序,最后循环这个key数组,通过key获取对象中的属性即可:
var user = {};
if(!user['Jason']) {
user['Jason'] = [];
}
user['Jason']['grade'] = 3;
user['Jason']['level'] = 1;

if(!user['arthinking']) {
user['arthinking'] = [];
}
user['arthinking']['grade'] = 4;
user['arthinking']['level'] = 1;

console.log(user);

for(var key in user){
console.log('key: ', key);
}

var keys = [];
for(var key in user){
keys.push(key);
}
keys = keys.sort();

for(var i=0; i<keys.length; i++){
var key = keys[i];
console.log(user[key]['grade']);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@zhaofeipeter

        Issue actions

          [js] 第421天 使用for-in语句能保证遍历对象的顺序吗?如果不能那为什么?如果可以那又如何保证? · Issue #2497 · haizlin/fe-interview