在开发过程中发现,各个浏览器上的Array.prototype.sort
内部算法实现机制不一样,导致执行结果有偏差。
根据stackoverflow上的问答和维基百科上的结果,可以知道 chrome 目前采用快排(QuickSort)和插入排序(InsertaionSort),而对于火狐,它采用归并排序(MergeSort)。而IE使用快排。
另外IE的sort 需要显示声明返回-1, 0, 1三种比较结果才可正常工作,而Chrome, Firefox中可以直接返回true, false等。
[1,2,3].sort(function (a, b) { return true})
这段代码,在chrome中将返回:
[3,2,1]
但是在IE里数组顺序并不会发现变化。
因此,兼容性写法是:
[1,2,3].sort(function(a, b) {return b - a; });
确保回调函数中返回的结果是显示的-1,0,1。
最后,要说明的一点是,在业务开发过程中对于复杂的排序过程,比起处理兼容性问题不如手动写排序算法更加适合,反而能保证一致性。