标签:
ECMAScript规范并没有指定for/in循环按照何种顺序来枚举对象属性。但实际上,主流浏览器厂商的JavaScript实现是按照属性定义的先后顺序来枚举简单对象的属性,先定义的属性先枚举。如果使用对象直接量的形式创建对象,则将按照直接量中属性的出现顺序枚举。有一些网站和Javascript库是依赖于这种枚举顺序的,浏览器厂商不大可能会修改这个顺序。
Javascript解释器枚举“简单”对象一种交互的属性枚举顺序。在下列情况下,枚举的顺序取决于具体的实现(并且是非交互的):
对象继承了可枚举属性;
对象具有整数数组索引的属性;
使用delete删除了对象已有的属性;
使用object.definePropery()或者类似的方法改变了对象的属性。
除了所有非继承的“自有”属性以外的继承属性都往往是可枚举的,而且可以按照它们定义的顺序进行枚举。
如果对象属性继承自多个“原型”,也就是说它的原型链上有多个对象,那么链上面的每一个原型对象的属性的遍历也是依照特定顺序执行的。
Javascript的一些实现依照数字顺序来枚举数组属性,而不是某种特定的顺序。但当数组元素的索引是非数字或数组是稀疏数组(数组索引是不连续的)时它们则按照特定顺序枚举。
标签:
原文地址:http://my.oschina.net/u/2352178/blog/475820