在開發(fā)過程中發(fā)現(xiàn),各個瀏覽器上的Array.prototype.sort
內(nèi)部算法實現(xiàn)機制不一樣友存,導(dǎo)致執(zhí)行結(jié)果有偏差。
根據(jù)stackoverflow上的問答和維基百科上的結(jié)果,可以知道 chrome 目前采用快排(QuickSort)和插入排序(InsertaionSort),而對于火狐核畴,它采用歸并排序(MergeSort)。而IE使用快排冲九。
另外IE的sort 需要顯示聲明返回-1, 0, 1三種比較結(jié)果才可正常工作谤草,而Chrome, Firefox中可以直接返回true, false等莺奸。
[1,2,3].sort(function (a, b) { return true})
這段代碼丑孩,在chrome中將返回:
[3,2,1]
但是在IE里數(shù)組順序并不會發(fā)現(xiàn)變化。
因此灭贷,兼容性寫法是:
[1,2,3].sort(function(a, b) {return b - a; });
確蔽卵В回調(diào)函數(shù)中返回的結(jié)果是顯示的-1,0氧腰,1枫浙。
最后刨肃,要說明的一點是,在業(yè)務(wù)開發(fā)過程中對于復(fù)雜的排序過程箩帚,比起處理兼容性問題不如手動寫排序算法更加適合真友,反而能保證一致性。