用于基于特定语言环境(locale)的规则比较两个字符串的相对顺序。
一、基本用法
stringObject.localeCompare(target, locales, options)
- stringObject
必填参数,表示调用该方法的 string 类型对象,即要进行比较的原字符串
- target
必填参数,也是一个 string 类型对象,即与 stringObject 进行比较的目标字符串
- locales
可选参数,一个数组或者单个字符串,指定了用于比较的特定语言环境(如['en-US', 'fr'])。如果不传或传入undefined,则使用用户浏览器的默认语言环境。
- oprions
可选参数,一个对象,用于配置比较行为的选项,例如:大小写敏感、排序风格等
二、返回值
localeCompare 方法返回一个整数值,表示两个字符串的相对位置关系。
- <0
stringObject 在 target 字符串之前(按照指定语言环境的排序规则)
- =0
stringObject 与 target 相等,或者根据所使用的语言环境规则,两者没有明显的排序差异
-
0
stringObject 在 target 字符串之后(按照指定语言环境的排序规则)
三、locales参数
1.类型与格式
locales可以是一个字符串,表示单一的语言环境,如"en-US"(美国英语),"fr-FR"(法国法语)
更常见的是作为一个数组进行传递,包含多个环境语言标识,按优先级从高到低排列。如:
['zh-CN', 'zh', 'en-US']
表示首选中文(简体,中国),其次是通用中文,最后是美国英语
2.语言标识符结构
- 一个完整的语言环境标识符由两部分组成:语言代码(ISO639标准)和区域代码(ISO3166)标准,中间用连字符分隔。
- 语言代码通常是两个小写字母,如:"en"(英语),"es"(西班牙语),"zh"(中文)。
- 区域代码通常是两个大写字母,如:"US"(美国),"ES"(西班牙),"zh"(中国),某些情况下可能包含更具体的子区域,如"en-GB"(英国英语)或 "es-419"(拉丁美洲西班牙语)。
- 对于不区分区域或不需要特定区域设置的情况下,仅使用语言代码即可。
3.扩展语言标签
除了基本的语言环境标识符外,还可以添加扩展标签来指定更具体的语言特性或变体。扩展标签以"-"后跟单个字母或"-"加上双字母作为前缀。常见的扩展关键字:
代码 | 含义 |
---|---|
u-co | 排序方式(collation),如 phonebk(电话簿排序)、search(适合搜索引擎的排序)等 |
nu | 数字系统(numbering system),如 arab(阿拉伯数字)、thai(泰文数字)等 |
实例:
"sr-Latn-RS-u-nu-latn"
指定了字符串比较时应遵循塞尔维亚语(拉丁字母)、塞尔维亚地区,并且在处理数字时使用拉丁数字系统
代码 | 含义 |
---|---|
sr | ISO 639 语言代码,代表塞尔维亚语(Serbian) |
Latn | ISO 15924 脚本代码,表示拉丁字母(Latin script)。这意味着在比较字符串时,应该使用拉丁字母的塞尔维亚语变体,而不是西里尔字母(Cyryllic)或其他变体 |
RS | ISO 3166 国家/地区代码,指代塞尔维亚共和国(Republic of Serbia)。此标识明确了塞尔维亚语在塞尔维亚境内的特定方言、拼写、词汇或约定,与其他使用塞尔维亚语的地区可能有所不同 |
-u- | Unicode 扩展序列的前缀,表示接下来的选项是按照 Unicode Locale Identifier (ULI) 规范定义的特定属性或设置 |
nu-latn | 在 -u- 后面,nu 是 Unicode 扩展关键字,表示“数字系统”(Numbering System)。这里的值 latn 指定在该语言环境中,应使用拉丁数字(0-9)作为数字的书写系统。这意味着在涉及数字的字符串比较或格式化时,应使用拉丁数字而非其他可能存在的数字表示方式(如塞尔维亚西里尔数字等) |
四、options参数
1.sensitivity
作用:控制大小写和变音符号的敏感度
可选值:
- base:只考虑基本字符,忽略大小写和变音符号的差异
- accent:考虑变音符号差异,但忽略大小写
- case:考虑大小写差异,但忽略变音符号
- variant:同时考虑大小写和变音符号差异,以及其他可能影响排序的细微差别(如字母表中的特殊排序规则)
- isensitive:等同于base,旧版遗留
2.igonrePunctuation
作用:是否忽略标点符号
类型:boolean
默认值:false
3.numeric
作用:当字符串包含数字时,是否按数值而非字面值进行比较
类型:boolean
默认值:false
4.caseFirst
作用:控制大小写在排序中的优先级
可选值:
- upper:大写字母优先
- lower:小写字母优先
- false或null:使用默认顺序排序,会因语言环境而异
5.usage
作用:指定比较的用途,影响排序规则的选择
可选值:
- sort:用于排序,选择最严格的排序规则
- search:用于搜索匹配,选择宽松的排序规则,提高匹配效率
6.collation
作用:指定特定的排序规则,覆盖语言环境默认的排序规则
类型:字符串,通常是一个符合 CLDR Collation Spec 的标识符
五、注意事项
- 浏览器兼容性:尽管 localeCompare() 是 ECMAScript 标准的一部分,但在不同浏览器和版本中可能存在实现差异,尤其是在处理复杂的语言环境和选项时。确保针对目标环境测试代码。
- 性能:对于大规模的数据排序,连续调用 localeCompare() 可能会带来性能开销。在性能关键的场景中,可以考虑先将数据转换为统一格式(如移除变音符号、统一大小写等),或者使用更高效的排序算法。