String.prototype.localeCompare()
基线 广泛可用
此功能已建立良好,可在许多设备和浏览器版本上运行。它自 2017 年 9 月.
报告反馈
localeCompare()
方法是 String
值的函数,它返回一个数字,指示此字符串在排序顺序中是位于给定字符串之前、之后还是与之相同。在支持 Intl.Collator
API 的实现中,此方法只需调用 Intl.Collator
。
试用
语法
Intl.Collator
对象并使用其 compare()
方法提供的函数。localeCompare(compareString)
localeCompare(compareString, locales)
localeCompare(compareString, locales, options)
参数
locales
和 options
参数自定义函数的行为,并允许应用程序指定应使用其格式化约定的语言。
在支持 Intl.Collator
API 的实现中,这些参数与 Intl.Collator()
构造函数的参数完全一致。不支持 Intl.Collator
的实现被要求忽略这两个参数,使返回的比较结果完全依赖于实现——它只需要是一致的。
compareString
-
与
referenceStr
进行比较的字符串。所有值都将 强制转换为字符串,因此省略它或传递undefined
会导致localeCompare()
与字符串"undefined"
进行比较,而这很少是您想要的。 locales
可选-
包含 BCP 47 语言标记的字符串,或此类字符串的数组。对应于
Intl.Collator()
构造函数的locales
参数。在不支持
Intl.Collator
的实现中,此参数将被忽略,通常使用主机语言环境。 options
可选-
调整输出格式的对象。对应于
Intl.Collator()
构造函数的options
参数。在不支持
Intl.Collator
的实现中,此参数将被忽略。
有关 locales
和 options
参数以及如何使用它们的详细信息,请参阅 Intl.Collator()
构造函数。
返回值
如果 referenceStr
出现在 compareString
之前,则为负数;如果 referenceStr
出现在 compareString
之后,则为正数;如果它们相等,则为 0
。
在使用 Intl.Collator
的实现中,这等效于 new Intl.Collator(locales, options).compare(referenceStr, compareString)
。
描述
返回一个整数,指示 referenceStr
是否在 compareString
之前、之后或与其等效。
- 当
referenceStr
出现在compareString
之前时为负数 - 当
referenceStr
出现在compareString
之后时为正数 - 如果它们等效,则返回
0
警告: 不要依赖于 -1
或 1
的精确返回值!
负数和正数整数结果在不同的浏览器(以及不同的浏览器版本)之间会有所不同,因为 ECMAScript 规范只规定了负数和正数。一些浏览器可能会返回 -2
或 2
,甚至其他一些负数或正数。
示例
使用 localeCompare()
Intl.Collator
对象并使用其 compare()
方法提供的函数。// The letter "a" is before "c" yielding a negative value
"a".localeCompare("c"); // -2 or -1 (or some other negative value)
// Alphabetically the word "check" comes after "against" yielding a positive value
"check".localeCompare("against"); // 2 or 1 (or some other positive value)
// "a" and "a" are equivalent yielding a neutral value of zero
"a".localeCompare("a"); // 0
对数组进行排序
localeCompare()
允许对数组进行不区分大小写的排序。
Intl.Collator
对象并使用其 compare()
方法提供的函数。const items = ["réservé", "Premier", "Cliché", "communiqué", "café", "Adieu"];
items.sort((a, b) => a.localeCompare(b, "fr", { ignorePunctuation: true }));
// ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
检查浏览器对扩展参数的支持
locales
和 options
参数在某些浏览器中尚不支持。
要检查实现是否支持它们,请使用 "i"
参数(一个要求拒绝非法语言标记的要求)并查找 RangeError
异常
Intl.Collator
对象并使用其 compare()
方法提供的函数。function localeCompareSupportsLocales() {
try {
"foo".localeCompare("bar", "i");
} catch (e) {
return e.name === "RangeError";
}
return false;
}
使用 locales
localeCompare()
提供的结果因语言而异。为了获得应用程序用户界面中使用的语言的排序顺序,请确保使用 locales
参数指定该语言(以及可能的一些备用语言)
Intl.Collator
对象并使用其 compare()
方法提供的函数。console.log("ä".localeCompare("z", "de")); // a negative value: in German, ä sorts before z
console.log("ä".localeCompare("z", "sv")); // a positive value: in Swedish, ä sorts after z
使用 options
可以使用 options
参数自定义 localeCompare()
提供的结果
Intl.Collator
对象并使用其 compare()
方法提供的函数。// in German, ä has a as the base letter
console.log("ä".localeCompare("a", "de", { sensitivity: "base" })); // 0
// in Swedish, ä and a are separate base letters
console.log("ä".localeCompare("a", "sv", { sensitivity: "base" })); // a positive value
数值排序
Intl.Collator
对象并使用其 compare()
方法提供的函数。// by default, "2" > "10"
console.log("2".localeCompare("10")); // 1
// numeric using options:
console.log("2".localeCompare("10", undefined, { numeric: true })); // -1
// numeric using locales tag:
console.log("2".localeCompare("10", "en-u-kn-true")); // -1
规范
规范 |
---|
ECMAScript 语言规范 # sec-string.prototype.localecompare |
ECMAScript 国际化 API 规范 # sup-String.prototype.localeCompare |
浏览器兼容性
BCD 表只在浏览器中加载