We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Learn more about funding links in repositories.
Report abuse
There was an error while loading. Please reload this page.
第421天 使用for-in语句能保证遍历对象的顺序吗?如果不能那为什么?如果可以那又如何保证?
3+1官网
我也要出题
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']); }
Activity
zhaofeipeter commentedon Jul 24, 2020
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']);
}