javascript array.sort兼容性问题

在开发过程中发现,各个浏览器上的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。

最后,要说明的一点是,在业务开发过程中对于复杂的排序过程,比起处理兼容性问题不如手动写排序算法更加适合,反而能保证一致性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章