String.prototype.localeCompare()

基线 广泛可用

此功能已建立良好,可在许多设备和浏览器版本上运行。它自 2017 年 9 月.

报告反馈

localeCompare() 方法是 String 值的函数,它返回一个数字,指示此字符串在排序顺序中是位于给定字符串之前、之后还是与之相同。在支持 Intl.Collator API 的实现中,此方法只需调用 Intl.Collator

试用

语法

当比较大量字符串时,例如对大型数组进行排序,最好创建一个 Intl.Collator 对象并使用其 compare() 方法提供的函数。
localeCompare(compareString)
localeCompare(compareString, locales)
localeCompare(compareString, locales, options)

参数

localesoptions 参数自定义函数的行为,并允许应用程序指定应使用其格式化约定的语言。

在支持 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 的实现中,此参数将被忽略。

有关 localesoptions 参数以及如何使用它们的详细信息,请参阅 Intl.Collator() 构造函数

返回值

如果 referenceStr 出现在 compareString 之前,则为负数;如果 referenceStr 出现在 compareString 之后,则为正数;如果它们相等,则为 0

在使用 Intl.Collator 的实现中,这等效于 new Intl.Collator(locales, options).compare(referenceStr, compareString)

描述

返回一个整数,指示 referenceStr 是否在 compareString 之前、之后或与其等效。

  • referenceStr 出现在 compareString 之前时为负数
  • referenceStr 出现在 compareString 之后时为正数
  • 如果它们等效,则返回 0

警告: 不要依赖于 -11 的精确返回值!

负数和正数整数结果在不同的浏览器(以及不同的浏览器版本)之间会有所不同,因为 ECMAScript 规范只规定了负数和正数。一些浏览器可能会返回 -22,甚至其他一些负数或正数。

示例

使用 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é']

检查浏览器对扩展参数的支持

localesoptions 参数在某些浏览器中尚不支持。

要检查实现是否支持它们,请使用 "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 表只在浏览器中加载

另请参阅