Javascript中的for in语句获取对象属性的顺序问题
本文由发表于5年前 | Javascript | 评论数 3 |  被围观 12,938 views+

下面创建一个对象,并为对象添加一些属性:

var user = {};
if(!user['Jason'']) {
    user['Jason''] = [];
}
user['Jason'']['grade''] = 3;
user['Jason'']['isChinese''] = 1;

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

我们获取user.length时发现,它是undefined的,我们只能通过for in循环获取对象的属性:

for(var key in user){
    console.log('key: ', key);
}
可以发现,循环输出的属性并不是按照创建的属性进行排列的。
Chrome Opera 的 JavaScript 解析引擎遵循的是新版 ECMA-262 第五版规范。因此,使用 for-in 语句遍历对象属性时遍历书序并非属性构建顺序。而 IE6 IE7 IE8 Firefox Safari 的 JavaScript 解析引擎遵循的是较老的 ECMA-262 第三版规范,属性遍历顺序由属性构建的顺序决定。
for-in 语句无法保证遍历顺序,应尽量避免编写依赖对象属性顺序的代码。如果想顺序遍历一组数据,请使用数组并使用 for 语句遍历。 如果想按照定义的次序遍历对象属性,请参考本文针对各浏览器编写特殊代码。

如果我们需要按照一定的顺序输出属性,也可以先在一个数组中保存所有的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']);
}
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/obtain-the-order-of-object-properties-in-javascript-for-in-the-statement.html
关键字:
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2012 8/16
文章评论
    3条评论
  1. jack 2013年11月21日10:15:14  #-49楼 回复 回复

    文章写得很好,刚好解决了项目中的一个问题,赞一个。

  2. 妙人 2013年12月16日17:17:25  #-48楼 回复 回复

    今天也碰到了,发现了这个问题,留个言

  3. 米兰 2014年06月25日09:23:19  #-47楼 回复 回复

    今天也碰到了,发现了这个问题,这个方法很好的解决了。

给我留言

有人回复时邮件通知我
Javascript的相关文章
随机文章 本月热门 热评
1 Java源码分析 – ArrayList动态数组列表源码分析 2011/10/10
2 jQuery使用数组编写向左滚动的图片栏 2011/5/15
3 Java笔记 – 泛型 泛型方法 泛型接口 擦除 边界 通配符(1) 2014/3/16
4 Java Web笔记 – 错误处理参数回显的实现方法 2011/11/12
5 据说这套试题对于软考很有帮助,大家可以看看 2011/4/26
6 Java基础笔记 – static与final关键字及其编写细节提示 2011/10/26
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.