localeCompare()是JavaScript中支持多语言本地化排序的字符串比较方法,返回-1、0或1表示前后顺序;可传入locale(如'zh-CN')和options(如{numeric:true,sensitivity:'base'})精细控制排序行为。

localeCompare() 是 JavaScript 中用于多语言、符合本地化习惯的字符串比较方法,它能根据指定语言环境(locale)正确处理大小写、重音、连字、数字顺序甚至书写方向等细节,比简单的 < 或 String.prototype.sort() 默认行为更准确可靠。
指定 locale 参数以匹配目标语言规则
直接传入语言标签(如 'zh-CN'、'en-US'、'fr-FR'、'ja-JP')可激活对应地区的排序逻辑:
- 中文(简体):
'你好'.localeCompare('世界', 'zh-CN')按汉语拼音顺序比较,“你好”在“世界”前(h 在 s 前) - 德语:
'ä'.localeCompare('z', 'de')返回负数,因为德语中ä视为ae,排在z之前 - 瑞典语:
'å'.localeCompare('z', 'sv')返回正数,因å是独立字母,排在z之后
使用 options 精细控制排序行为
第二个参数是配置对象,常用选项包括:
-
sensitivity: 'base'— 忽略大小写和重音(仅比较基础字符),适合不区分大小写的列表排序 -
numeric: true— 启用数字感知排序,让'item10'排在'item2'之后(而非默认的字典序'item10' < 'item2') -
caseFirst: 'upper'— 大写字母优先(如土耳其语需求);'lower'则小写优先 -
usage: 'search'— 优化搜索场景(如忽略标点、全角/半角等价),但排序时一般用'sort'(默认)
在数组排序中安全使用 localeCompare
直接将 localeCompare 作为 Array.prototype.sort() 的比较函数即可,但要注意两点:
- 必须显式返回比较结果:
(a, b) => a.localeCompare(b, 'ja-JP', { numeric: true }) - 避免混用 locale —— 全部元素应使用同一 locale 和 options,否则排序可能不稳定(尤其涉及不同脚本混合时,如中英文混排)
- 示例(日文数字感知排序):
['第1章', '第10章', '第2章'].sort((a, b) => a.localeCompare(b, 'ja-JP', { numeric: true }))
→['第1章', '第2章', '第10章']
处理浏览器兼容性与回退策略
现代浏览器均支持 localeCompare,但旧版 Safari 或 IE 可能不识别某些 locale(如 'zh-Hans')。建议:
- 使用标准 BCP 47 标签(如
'zh-CN'而非'zh-Hans-CN'),兼容性更好 - 检查支持性:
typeof String.prototype.localeCompare === 'function' - 必要时提供降级:若 locale 不被支持,可 fallback 到基础字符串比较或使用
Intl.Collator(更强大且可复用)

















