js localecompare 实现
使用 localeCompare 进行字符串比较
localeCompare 是 JavaScript 字符串方法,用于根据当前语言环境的排序规则比较两个字符串。返回一个数字,表示比较结果:
- 负数:调用字符串在参数字符串之前
- 零:两者相等
- 正数:调用字符串在参数字符串之后
基本语法:
string.localeCompare(compareString, locales, options)
基本用法示例
比较两个字符串的默认排序:
const result = 'apple'.localeCompare('banana');
console.log(result); // 输出负数('apple' 在 'banana' 之前)
指定语言环境
通过 locales 参数指定语言环境,影响排序规则:

// 德语中 'ä' 排序接近 'a'
console.log('ä'.localeCompare('z', 'de')); // 输出负数
// 瑞典语中 'ä' 排序在 'z' 之后
console.log('ä'.localeCompare('z', 'sv')); // 输出正数
使用选项自定义比较
options 参数可控制大小写、标点等规则:
// 忽略大小写比较
const caseInsensitive = 'Apple'.localeCompare('apple', undefined, { sensitivity: 'accent' });
console.log(caseInsensitive); // 0(视为相等)
// 按数字顺序比较
const numericCompare = 'file2'.localeCompare('file10', undefined, { numeric: true });
console.log(numericCompare); // 输出负数(2 < 10)
常见选项说明
-
sensitivity:
'base': 忽略大小写和重音(a == A == á)'accent': 区分重音但不区分大小写(a == A != á)'case': 区分大小写但不区分重音(a != A == á)'variant': 区分大小写和重音(默认)
-
numeric: 设为true时支持数字顺序比较('2' < '10') -
ignorePunctuation: 设为true时忽略标点符号
实际应用场景
对数组进行本地化排序:
const items = ['résumé', 'Resume', 'Garden', 'apple'];
items.sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' }));
console.log(items);
// ['apple', 'Garden', 'Resume', 'résumé'](不区分大小写)
处理多语言用户输入时,推荐始终指定 locales 参数以确保预期行为。浏览器实现可能略有差异,测试时需覆盖目标环境。






