IE下js数组sort不可靠

Author : lovecicy

不知道有多少人用过javascript array的sort函数, 最近使用发现了IE下使用sort并不可靠,时常会爆出Number expected的错误,而且貌似没有固定的规律。

先来看看sort的用法:

var arr = [

{“name”:”adf”,”id”:”123″},
{“name”:”bcs”,”id”:”234″},
{“name”:”zddf”,”id”:”345″},
{“name”:”dfsda”,”id”:”456″},
{“name”:”dfasdf”,”id”:”567″}

]

var barr = arr.sort(function(a,b){

a = a.id;

b = b.id;

return (a>b)?1:((a==b)?0:-1);

});

上面这段代码在FF/Chrome下都能正常工作,即使在IE下,会报错的次数也很少,可能几百次会有一次。但是,如果数组长度达到100,你会发现几乎你每次刷新,在IE下都会报错。

来自Zach Leatherman 的一篇博客提供了一个解决方案,而且解决的方式很简单,只要将sort函数调用的排序函数稍作改动即可:

function(a,b){

var aa = a.id;

var ba = b.id;

return (aa>ba)?1:((aa==ba)?0:-1);

}

这样,代码就能够在IE下正常工作。从Zach的实验来看, IE9已经修复了这个Bug,但是对于IE6,7,8, 这样的hack还是必须的。

但是,这样的方法太诡异了,有人能解释一下吗?

http://www.zachleat.com/web/array-sort/comment-page-1/#comment-3941

standard

Have your say