首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE9 javascript排序顺序...为什么?

IE9 javascript排序顺序...为什么?
EN

Stack Overflow用户
提问于 2011-01-24 22:06:39
回答 2查看 1.9K关注 0票数 1

我注意到当比较函数返回0时,IE9排序顺序正在改变元素顺序。

请参见:

代码语言:javascript
复制
var myarray=[
    {id:1,val:0},
    {id:2,val:0},
    {id:3,val:7},
    {id:4,val:41}
];
myarray.sort(function(a,b){return a.val - b.val});

for(var i in myarray)
{
    console.log(myarray[i].id);
}

当前稳定版本的Chrome、火狐、Opera和Safari的输出结果如下:1 2 3 4

IE7和IE8的输出相同。

IE9输出为:2 1 3 4

为什么?这正常吗?

EN

回答 2

Stack Overflow用户

发布于 2011-01-24 22:22:49

如果您试图迭代数值属性,请不要在数组上使用for...in,原因有二:

  • 您还将看到添加到Array.prototype中的方法和属性;
  • 迭代顺序在ECMAScript规范中定义为依赖于实现,这意味着在理论上它可以是任何东西。

这两点也适用于Object。Chrome实际上并不符合最常见的浏览器行为,导致了heated debate in a Chrome bug report

票数 4
EN

Stack Overflow用户

发布于 2011-01-24 22:11:27

根据您的排序函数,这两个元素是相等的,它们以什么顺序出现并不重要。这取决于浏览器,要么保持订单不变,要么切换订单,因为它认为appropriate...neither是一种保证。

如果两者不相等,那么您的排序函数是不正确的,应该将其他项也考虑在内。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4782893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档