Метод localeCompare сравнивает строки на разных языках с учетом их правил.

Для того, что бы понять для чего нужен этот метод, давайте рассмотрим алгоритм сравнения строк:

'abc' > 'ab' //true
'abc' < 'ab' //false
'abc' > 'abc' //false
'abc' >= 'abc' //true
'z' > 'abc' //true

'а' > 'Я' // true
'ё' > 'я' // true

Строки сравниваются как в словаре. Сначала сравниваются первые символы строк, затем вторые, третьи... И как только какой-то символ оказывается меньше, строка считается меньше (даже если в ней больше символов). Если у какой-то строки заканчиваются символы, то она считается меньше. Если символы закончились у обоих строк одновременно - они одинаковые.

Но стоит отметить, что строки сравниваются по Юникоду - каждому символу соответствует определенный числовой код. Но не все символы в Юникоде соответствуют их месту в алфавите. Есть некоторые исключения. Помимо этого маленькие буквы идут после больших, из чего следует, что маленькие буквы - больше больших (именно поэтому последние 2 примера выше и дали такие странные результаты).

А вот метод localeCompare сравнивает строки правильно. Он может сравнивать строки в соответствии с правилами различных языков.

Метод localeCompare поддерживается всеми современными браузерами, кроме ИЕ меньше 10 версии.

Метод применяется к строке, и в параметре получает строку для сравнения. Если строка больше переданной - возвращается '1', если меньше - '-1', если одинаковые - '0'.

Синтаксис

строка1.localeCompare(строка2);

Примеры

Пример

Рассмотрим примеры приведенные выше, но уже с localeCompare:

'abc'.localeCompare('ab') //1
'abc'.localeCompare('abc') //0
'z'.localeCompare('abc') //1

'а'.localeCompare('Я') // -1
'ё'.localeCompare('я') // -1

Пример

Попросим пользователя ввести 2 строки. И скажем какая из них больше:

var str1 = prompt('Введите первую строку');
var str2 = prompt('Введите вторую строку');

var answers = {
	'0': 'Строки одинаковые',
	'1': 'Первая строка больше',
	'-1': 'Вторая строка больше',
}

var res = str1.localeCompare(str2);
alert(answers[res]);

Результат выполнения кода: