This page was translated from English by the community.Learn more and join the MDN Web Docs community.
String.prototype.localeCompare()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
МетодlocaleCompare()строковых значений возвращает число, указывающее, где должна находиться эта строка при сортировке (до, после или в том же самом месте, что и строка, переданная в качестве параметра). В реализациях с поддержкойIntl.Collator API этот метод просто вызываетIntl.Collator.
При сравнении большого количества строк, например при сортировке больших массивов, лучше создать объектIntl.Collator и использовать предоставляемый им методcompare().
In this article
Интерактивный пример
const a = "réservé"; // With accents, lowercaseconst b = "RESERVE"; // No accents, uppercaseconsole.log(a.localeCompare(b));// Expected output: 1console.log(a.localeCompare(b, "en", { sensitivity: "base" }));// Expected output: 0Синтаксис
localeCompare(compareString)localeCompare(compareString, locales)localeCompare(compareString, locales, options)Параметры
Параметрыlocales иoptionsПараметрыlocales иoptions изменяют поведение функции и позволяют приложениям определять язык, правила форматирования которого, следует использовать.
В реализациях, поддерживающихIntl.Collator API, эти параметры соответствуют параметрам конструктораIntl.Collator(). Реализации без поддержкиIntl.Collator должны игнорировать оба параметра, возвращаемый результат сравнения полностью зависит от реализации.
compareStringСтрока, с которой сравнивается
referenceStr. Все значенияприводятся к строкам, поэтому отсутствие значения или значениеundefinedприводит к тому, чтоlocaleCompare()будет сравнивать со строкой"undefined", а это скорее всего не то, что вы ожидаете.localesНеобязательныйСтрока с языковым тегом BCP 47 или массив таких строк. Соответствует параметру
localesконструктораIntl.Collator().В реализациях без поддержки
Intl.Collatorэтот параметр игнорируется и обычно используется локаль устройства.optionsНеобязательныйОбъект определяющий выходной формат. Соответствует параметру
optionsконструктораIntl.Collator().В реализациях без поддержки
Intl.Collatorэтот параметр игнорируется.
Смотрите описаниеконструктораIntl.Collator() для подробностей использования параметровlocales иoptions.
Возвращаемое значение
Отрицательное число если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()
// Буква "а" идёт перед "в", поэтому результат будет отрицательным"а".localeCompare("в"); // -2 или -1 (или другое отрицательное число)// В алфавитном порядке слово "первый" идёт после "второй", поэтому результат будет положительным"первый".localeCompare("второй"); // 2 или 1 (или другое положительное число)// "а" и "а" одинаковы, поэтому результат будет равен нулю"а".localeCompare("а"); // 0Сортировка массива
localeCompare() даёт возможность регистронезависимой сортировки массивов.
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
Параметрыlocales иoptions поддерживаются ещё не всеми браузерами.
Чтобы проверить их поддержку реализацией, используйте аргумент"i" (требование, чтобы недопустимые языковые метки отклонялись) и исключениеRangeError:
function localeCompareSupportsLocales() { try { "foo".localeCompare("bar", "i"); } catch (e) { return e.name === "RangeError"; } return false;}Использование параметраlocales
Результаты, предоставляемыеlocaleCompare(), отличаются в зависимости от языка. Для получения порядка сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) используя параметрlocales:
console.log("ä".localeCompare("z", "de")); // отрицательное значение: в немецком буква ä идёт рядом с буквой aconsole.log("ä".localeCompare("z", "sv")); // положительное значение: в шведском буква ä следует после буквы zИспользование параметраoptions
Результат, предоставляемыйlocaleCompare(), может быть настроен с помощью параметраoptions:
// В немецком буква a является базовой для буквы äconsole.log("ä".localeCompare("a", "de", { sensitivity: "base" })); // 0// В шведском буквы ä и a являются двумя разными базовыми буквамиconsole.log("ä".localeCompare("a", "sv", { sensitivity: "base" })); // положительное значениеСортировка чисел
// По умолчанию, "2" > "10"console.log("2".localeCompare("10")); // 1// Сортировка чисел с использованием настроек:console.log("2".localeCompare("10", undefined, { numeric: true })); // -1// Сортировка чисел с использованием языковых меток:console.log("2".localeCompare("10", "en-u-kn-true")); // -1Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-string.prototype.localecompare> |
| ECMAScript® 2026 Internationalization API Specification> # sup-String.prototype.localeCompare> |