String.prototype.localeCompare()
Сводка
Метод localeCompare()
возвращает число, указывающее, должна ли данная строка находиться до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк.
Новые аргументы locales
и options
позволяют приложениям определять язык, чей порядок сортировки оно хочет использовать и настраивать поведение этой функции. В старых реализациях, игнорирующих аргументы locales
и options
, используемая локаль и порядок сортировки целиком зависят от реализации.
Синтаксис
str.localeCompare(compareString[, locales[, options]])
Параметры
Проверьте раздел Совместимость с браузерами, чтобы увидеть, какие браузеры поддерживают аргументы locales
и options
, и Пример: проверка поддержки аргументов locales
и options
для определения этой возможности.
compareString
-
Строка, с которой сравнивается данная.
Описание
Возвращает число, указывающее, должна данная строка находится до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк. Если данная строка предшествует строке compareString
, возвращает отрицательное число, если она следует за строкой compareString
, возвращает положительное значение и возвращает 0, если строки находятся на одном уровне.
Примеры
Пример: использование метода localeCompare()
Следующий пример демонстрирует различные потенциальные результаты для строки, находящейся до, после или на том же самом уровне, что и другая строка:
js
console.log(new Intl.Collator().compare("a", "c")); // -2, -1 или другое отрицательное значение
console.log(new Intl.Collator().compare("c", "a")); // 2, 1 или другое положительное значение
console.log(new Intl.Collator().compare("a", "a")); // 0
Обратите внимание, что результат, показанный в коде выше, может сильно различаться в зависимости от браузера и его версии. Происходит это потому, что возвращаемые значения зависят от реализации. То есть, спецификация требует только того, чтобы значение было отрицательным, если строка данная следует до переданной, и положительным — если после.
Пример: проверка поддержки аргументов locales
и options
Аргументы locales
и options
поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение RangeError
:
js
function localeCompareSupportsLocales() {
try {
"a".localeCompare("b", "i");
} catch (e) {
return e.name === "RangeError";
}
return false;
}
Пример: использование аргумента locales
Результаты, предоставляемые методом localeCompare()
, сильно различаются в зависимости от языка. Для получения порядка сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент locales
:
js
console.log("ä".localeCompare("z", "de")); // отрицательное значение: в немецком буква ä идёт рядом с буквой a
console.log("ä".localeCompare("z", "sv")); // положительное значение: в шведском буква ä следует после буквы z
Пример: использование аргумента options
Результат, предоставляемый методом localeCompare()
, может быть настроен с помощью аргумента options
:
js
// В немецком буква a является базовой для буквы ä
console.log("ä".localeCompare("a", "de", { sensitivity: "base" })); // 0
// В шведском буквы ä и a являются двумя разными базовыми буквами
console.log("ä".localeCompare("a", "sv", { sensitivity: "base" })); // положительное значение
Производительность
При сравнении большого количества строк, например, при сортировке больших массивов, лучшим вариантом будет создание объекта Intl.Collator
и использование функции, предоставляемой его свойством compare
.
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-string.prototype.localecompare |
ECMAScript Internationalization API Specification # sup-String.prototype.localeCompare |
Совместимость с браузерами
BCD tables only load in the browser