在開發過程中發現,各個瀏覽器上的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。
最後,要說明的一點是,在業務開發過程中對於複雜的排序過程,比起處理兼容性問題不如手動寫排序算法更加適合,反而能保證一致性。