今天測試測出一個BUG,看了下遺留代碼,在做sort排序時,用了localeCompare進行字符串比較。
//在Ios和chrome下返回-1,說明HangJinLu比HanZhongLu小,
//在安卓下面返回了13,說明HangJinLu比HanZhongLu大
'HangJinLu'.localeCompare('HanZhongLu')
//返回true
'HangJinLu'>'HanZhongLu'
看了下該方法說明:
referenceStr.localeCompare(compareString[, locales[, options]])
把 < 和 > 運算符應用到字符串時,它們只用字符的 Unicode 編碼比較字符串,而不考慮當地的排序規則。以這種方法生成的順序不一定是正確的。例如,在西班牙語中,其中字符 “ch” 通常作為出現在字母 “c” 和 “d” 之間的字符來排序。
localeCompare() 方法提供的比較字符串的方法,考慮了默認的本地排序規則。ECMAscript 標準并沒有規定如何進行本地特定的比較操作,它只規定該函數采用底層操作系統提供的排序規則。