показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
alert( 'Б' > 'А' ); // true
Буквы сравниваются в алфавитном порядке. Какая буква в алфавите позже — та и больше.
Кодировка Unicode
Аналогом «алфавита» во внутреннем представлении строк служит кодировка, у каждого символа — свой номер (код). JavaScript использует кодировку Unicode. При этом сравниваются численные коды символов.
В кодировке Unicode обычно код у строчной буквы больше, чем у прописной, поэтому:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
alert('а' > 'Я'); // true, строчные буквы больше прописных
Для корректного сравнения символы должны быть в одинаковом регистре.
Сравнение осуществляется как в телефонной книжке или в словаре. Сначала сравниваются первые буквы, потом вторые, и так далее, пока одна не будет больше другой.
Иными словами, больше — та строка, которая в телефонной книге была бы на большей странице.
Например:
Если первая буква одной строки больше — значит первая строка больше, независимо от остальных символов:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
alert( 'Банан' > 'Аят' );
Если одинаковы — сравнение идёт дальше. Здесь оно дойдёт до третьей буквы:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
alert( 'Вася' > 'Ваня' ); // true, т.к. 'с' > 'н'
При этом любая буква больше отсутствия буквы:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
alert( 'Привет' > 'Прив' ); // true, так как 'е' больше чем "ничего".
Такое сравнение называется лексикографическим.
Обычно мы получаем значения от посетителя в виде строк. Например, prompt возвращает строку, которую ввел посетитель.
Числа, полученные таким образом, в виде строк сравнивать нельзя, результат будет неверен. Например:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
alert( "2" > "14" ); // true, неверно, ведь 2 не больше 14
В примере выше 2 оказалось больше 14, потому что строки сравниваются посимвольно, а первый символ '2' больше '1'.
Правильно было бы преобразовать их к числу явным образом. Например, поставив перед ними +:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки