compareFunction
沒有被應用,元素將被轉換為字串並以 Unicode
編碼位置進行比較來排序。舉例來說,"Banana" 會被排在 "cherry" 之前。在數值排序中,9 排在 80
前面,但因為數字被轉換成字串,在 Unicode 順序中 "80" 會在 "9" 的前面。如果
compareFunction
被應用,陣列元素們將根據比較函式之回傳值來排序。如果 a
和 b
為被比較之兩元素,則:- 若
compareFunction(a, b)
的回傳值小於 0,則會把a
排在小於b
之索引的位置,即a
排在b
前面。 - 若
compareFunction(a, b)
回傳 0,則a
與b
皆不會改變彼此的順序,但會與其他全部的元素比較來排序。備註:ECMAscript 標準並不保證這個行為,因此不是所有瀏覽器(如 Mozilla 版本在 2003 以前)都遵守此行為。 - 若
compareFunction(a, b)
的回傳值大於 0,則會把b
排在小於a
之索引的位置,即b
排在a
前面。 compareFunction(a, b)
在給予一組特定元素 a 及 b 為此函數之兩引數時必須總是回傳相同的值。若回傳值不一致,排序順序則為 undefined。
sort(a, b) 預設是從小排到大
compareFunction(a, b) > 0 認為 (a - b > 0) 所以 a 與 b 交換