首页

Javascript

Html
Css
Node.js
Electron
移动开发
小程序
工具类
服务端
浏览器相关
前端收藏
其他
关于
公司注册

for in循环的输出顺序问题

2014年05月29日 发布 阅读(2315) 作者:Jerman

在以前的编码过程中,对for…in遍历对象的循环的,一直以为是没有顺序的。直到遇到有对象有的key值为纯数字时,发现现代浏览器对for…in循环是有顺序之分的。

看下面的例子:

  1. var obj = {
  2. "c":"c",
  3. "b":"b",
  4. "3":"3",
  5. "2":"2",
  6. "0":"0",
  7. "2.5":"2.5",
  8. "a1":"1",
  9. "a":"a",
  10. "-2":"-2"
  11. };
  12. for (var i in obj) {
  13. console.log(i);
  14. };

上面代码中,IE11、Chrome、firefox的输出顺序是这样的:0、 2、3、c、b、2.5、a1、a、-2,可见这个顺序没有按照我们定义的顺序输出,而是把0和正整数提到了前面从小到大输出,再把其他的按定义时的顺序输出。

safari、IE6|7|8的顺序没有变,还是按定义的顺序输出。

for…in循环数据,顺序不变。

chrome的算法如下:

1、对所有key计算parsefloat的结果

2、将parsefloat为0或正整数的提取出来,从小到大输出

3、将剩下的,按定义顺序输出

版权声明:本站文章除特别声明外,均采用署名-非商业性使用-禁止演绎 4.0 国际 许可协议,如需转载,请注明出处