Сравнение строк работает лексикографически, иначе говоря, посимвольно. Сравнение строк s1 и s2 обрабатывается по следующему алгоритму:
Сравниваются первые символы: s1[0] и s2[0] . Если они разные, то сравниваем их и, в зависимости от результата их сравнения, возвратить true
или false . Если же они одинаковые, то…
Сравниваются вторые символы s1[1] и s2[1]
Затем третьи s1[2] и s2[2] и так далее, пока символы не будут наконец разными, и тогда какой символ больше – та строка и больше. Если же в какой‑либо строке закончились символы, то считаем, что она меньше, а если закончились в обеих – они равны.
Спецификация языка определяет этот алгоритм более детально. Если же говорить простыми словами, смысл алгоритма в точности соответствует порядку, по которому имена заносятся в орфографический словарь.
"Вася" > "Ваня" // true, т.к. начальные символы совпадают, а потом 'с' > 'н' "Дома" > "До" // true, т.к. начало совпадает, но в 1‐й строке больше символов
Правильное сравнение
Все современные браузеры, кроме IE10‑ (для которых нужно подключить библиотеку Intl.JS ) поддерживают стандарт ECMA 402 , поддерживающий сравнение строк на разных языках, с учётом их правил.
Способ использования:
var str = "Ёлки";
alert( str.localeCompare("Яблони") ); // ‐1
Метод str1.localeCompare(str2) возвращает ‐1 , если str1 < str2 , 1 , если str1 > str2 и 0 , если они равны.
Более подробно про устройство этого метода можно будет узнать в статье Intl: интернационализация в JavaScript, когда это вам понадобится.
Итого
Строки в JavaScript имеют внутреннюю кодировку Юникод. При написании строки можно использовать специальные символы, например \n и вставлять юникодные символы по коду.
Мы познакомились со свойством length и методами charAt , toLowerCase/toUpperCase , substring/substr/slice (предпочтителен slice ). Есть и другие методы, например trim обрезает пробелы с начала и конца строки.
Строки сравниваются побуквенно. Поэтому если число получено в виде строки, то такие числа могут сравниваться некорректно, нужно преобразовать его к типу number.
При сравнении строк следует иметь в виду, что буквы сравниваются по их кодам. Поэтому большая буква меньше маленькой, а буква ё вообще вне основного алфавита.
Для правильного сравнения существует целый стандарт ECMA 402. Это не такое простое дело, много языков и много правил. Он поддерживается во всех современных браузерах, кроме IE10‑, в которых нужна библиотека https://github.com/andyearnshaw/Intl.js/ . Такое сравнение работает через вызов str1.localeCompare(str2) .
Больше информации о методах для строк можно получить в справочнике: http://javascript.ru/String.
✔ Задачи
Do'stlaringiz bilan baham: |