--- title: String.prototype.localeCompare() slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare tags: - Internationalization - JavaScript - Method - Prototype - Reference - String translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare ---
Метод localeCompare()
возвращает число, указывающее, должна ли данная строка находиться до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк.
Новые аргументы locales
и options
позволяют приложениям определять язык, чей порядок сортировки оно хочет использовать и настраивать поведение этой функции. В старых реализациях, игнорирующих аргументы locales
и options
, используемая локаль и порядок сортировки целиком зависят от реализации.
str.localeCompare(compareString[, locales[, options]])
Проверьте раздел Совместимость с браузерами, чтобы увидеть, какие браузеры поддерживают аргументы locales
и options
, и Пример: проверка поддержки аргументов locales
и options
для определения этой возможности.
compareString
Возвращает число, указывающее, должна данная строка находится до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк. Если данная строка предшествует строке compareString
, возвращает отрицательное число, если она следует за строкой compareString
, возвращает положительное значение и возвращает 0, если строки находятся на одном уровне.
localeCompare()
Следующий пример демонстрирует различные потенциальные результаты для строки, находящейся до, после или на том же самом уровне, что и другая строка:
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
поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}:
function localeCompareSupportsLocales() { try { 'a'.localeCompare('b', 'i'); } catch (e) { return e.name === 'RangeError'; } return false; }
locales
Результаты, предоставляемые методом localeCompare()
, сильно различаются в зависимости от языка. Для получения порядка сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент locales
:
console.log('ä'.localeCompare('z', 'de')); // отрицательное значение: в немецком буква ä идёт рядом с буквой a console.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' })); // положительное значение
При сравнении большого количества строк, например, при сортировке больших массивов, лучшим вариантом будет создание объекта {{jsxref("Global_Objects/Collator", "Intl.Collator")}} и использование функции, предоставляемой его свойством {{jsxref("Collator.prototype.compare", "compare")}}.
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 3-е издание. | Стандарт | Изначальное определение. Реализована в JavaScript 1.2. |
{{SpecName('ES5.1', '#sec-15.5.4.9', 'String.prototype.localeCompare')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}} | {{Spec2('ES6')}} | |
{{SpecName('ES Int 1.0', '#sec-13.1.1', 'String.prototype.localeCompare')}} | {{Spec2('ES Int 1.0')}} | Определение параметров locale и option . |
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Аргументы locales и options |
{{CompatChrome("24")}} | {{CompatGeckoDesktop("29")}} | {{CompatIE("11")}} | {{CompatOpera("15")}} | {{CompatNo}} |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Аргументы locales и options |
{{CompatNo}} | {{CompatChrome("26")}} | {{CompatNo}} {{bug("864843")}} |
{{CompatNo}} | {{CompatNo}} | {{CompatNo}} |