`
zhouyrt
  • 浏览: 1141710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

各浏览器中for in顺序的差异

阅读更多

如下

var obj = {
  2:"2",
  40:"40",
  15:"15"
};
for (var k in obj) {
	console.log(k); 
};

 

 

 

IE6/7/8Firefox/Safari

 

2
40
15

 
IE9/Chrome10/Opera11
 
2
15
40


即IE9/Chrome10/Opera11中不是按定义时的顺序输出的。for in规则参考ECMAScript5 12.6.4。


分享到:
评论
11 楼 cuixiping 2011-04-03  
不应该让你的代码依赖for...in遍历的顺序。
因为键值对不应该顺序敏感:
x={a:1,b:2} 和 x={b:2,a:1} 应该算是等价的表示。

微软的JScript手册,讲到for...in的时候也说:
当在一个对象上迭代时,没有办法决定或控制把对象的成员赋给variable的次序。
10 楼 ahopedog2 2011-04-02  
Object的键值好像不简单是Hash吧
9 楼 leves 2011-04-01  
hash 本来就是无序的,不同的hash实现,顺序可能存在不同
8 楼 fantasybei 2011-03-31  
我之前看mootools源码的时候,好像里面有一段代码就是依赖这个的,但是我在irc里问了一个牛人,他说现在浏览器基本都是按定义的时候来遍历的
7 楼 EldonReturn 2011-03-31  
javascript specification 没规定这个。所以嘛,顺序就别研究了。
6 楼 _piggy_ 2011-03-31  
个人感觉一个是hashmap一个是linkedhashmap
5 楼 soni 2011-03-31  
别考虑这个了,使用 for in的时候你就别指望能按照某些预想的顺序读取.
4 楼 chensulong 2011-03-30  
从CNBLOGS上抄过来的?。。。是同一个作者囧
3 楼 diogin 2011-03-30  
普通 hash dict 跟 ordered dict 是两种不同的数据结构,前者不维护 keyvalue 项的先后顺序,后者会维护。
2 楼 zhouyrt 2011-03-30  
友情提醒,貌似多了个逗号
quote]

已修改。谢谢
1 楼 ONEBOYS 2011-03-29  
友情提醒,貌似多了个逗号

另外之前从小美那里了解到。除ie外,其他浏览器可以枚举字符串
var a = "123" 
for(var i in a){  
	alert(i+":"+a[i])  
}

相关推荐

    javascript for-in有序遍历json数据并探讨各个浏览器差异

    根据 ECMA-262(ECMAScript)第三版中描述,for-in 语句的属性遍历的顺序是由对象定义时属性的书写顺序决定的。 关于 ECMA-262(ECMAScript)第三版中 for-in 语句的更多信息,请参考 ECMA-262 3rd Edition 中 12.6....

    详谈js中标准for循环与foreach(for in)的区别

    在JavaScript中,遍历数组通常有两种方式:标准的`for`循环和`forEach`方法(`for...in`循环在数组遍历中并不推荐)。这两种方法在基础使用时可能看起来相似,但它们在内部实现和使用场景上存在显著差异。 首先,让...

    javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历

    在不同的浏览器中,JavaScript的实现可能略有差异。因此,为了确保代码的兼容性,开发者通常会通过检查`navigator.userAgent`属性来识别用户使用的浏览器类型。在提供的代码中,`_jsc.client`对象通过检查`...

    JavaScript遍历Json串浏览器输出的结果不统一问题

    然而,JavaScript引擎对`for...in`循环遍历属性的顺序并不保证,尤其是当属性名称为数字时。不同浏览器可能按照不同的规则来处理这些属性,导致遍历顺序不一致。例如,Chrome和Firefox可能会按照数字大小排序,而IE8...

    IE6兼容笔记

    在不同的浏览器中,层叠顺序(Z-index)的处理方式存在差异。IE6和IE7在处理Z-index时也有其特定的规则。理解这些规则对于解决跨浏览器兼容性问题是至关重要的。 **IE6/IE7规则:** 1. **父级层叠上下文的背景、...

    行python代码写一个语言检测器.pdf

    描述中的内容强调了语言检测的普遍性和实用性,如Chrome浏览器和Facebook如何识别和翻译不同语言。 在自然语言处理(NLP)领域,语言检测是一个重要的任务,它涉及对文本的分析以确定其语言类型。这个过程通常基于...

    前端工程师面试题题及答案(全面综合).docx

    - 题目中`for(var i in emp)`应被替换为`for(var i = 0; i ; i++)`,因为`emp.length`获取数组长度,而非使用`length()`方法。 3. Document对象的方法: - `focus()`:使元素获得焦点。 - `getElementById()`:...

    JavaScript绑定事件监听函数的通用方法

    该方法满足了前述要求的前四点,但在第五点上由于JavaScript的for/in循环顺序的不确定性,可能存在执行顺序上的差异。 Dean Edward的方法通过为每个事件处理函数生成一个唯一的标识符($$guid),并且在事件触发时...

    前端程序员必需知道的高性能Javascript学问_.docx

    - **属性访问方式**:虽然使用点表示法(如`object.name`)和括号表示法(如`object["name"]`)在大多数浏览器中性能差异不大,但在Safari浏览器中,点表示法始终更快。 #### 二、循环优化 JavaScript中有多种循环...

    js 性能优化之算法和流程控制

    同样,如果可以确定遍历的顺序,尽量颠倒数组的遍历顺序,因为某些浏览器在向前遍历时比向后遍历时性能更好。 2. 减少循环中函数的调用次数:函数调用是循环中开销较大的操作之一。如果可以的话,尽量将需要频繁...

    行python代码写一个语言检测器.docx

    return [self.text[i:i + self.n] for i in range(len(self.text) - self.n + 1)] def get_frequency(self): return Counter(self.ngrams) def detect_language(text, n=2, known_languages={}): detector = ...

    java程序员应该掌握的css

    11. **CSS重置与 Normalize.css**:理解为什么需要CSS重置,以及Normalize.css的作用,以消除浏览器默认样式差异,实现更一致的跨浏览器渲染。 12. **CSS性能优化**:学习减少HTTP请求、使用CSS Sprites、合理组织...

    JavaScript程序中的流程控制语句用法总结

    由于ECMAScript对象的属性没有固定的顺序,因此使用for-in循环得到的属性名的顺序可能因浏览器的不同而有所差异。 最后,还有一些控制执行流程的语句,如break、continue和return。 break语句用于立即退出循环,...

    手机端web焦点图片

    为了确保在不同手机浏览器上的兼容性,开发者需要考虑各种设备的屏幕尺寸、分辨率、浏览器差异等问题,可能需要借助响应式设计、媒体查询(Media Queries)以及对各类移动浏览器(如Chrome、Safari、Firefox Mobile...

    超级有影响力霸气的Java面试题大全文档

     forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。...

Global site tag (gtag.js) - Google Analytics