сравнение строк “2” > “15” = true

180
27 июля 2018, 15:20

Прочитал мануал по поводу строк: Посимвольное сравнение

Но не до конца понял суть сравнения:

"2" > "15"// Выдает true

Почему выдает true?

Если сравнивать по символам, то

"2" > "1"// true

Почему так?

Answer 1

Непосредственно сравнение срок происходит посимвольно - первый с первым, второй со вторым:

Если первая буква первой строки больше – значит первая строка больше, независимо от остальных символов:

Оператор нестрогого равенства == сравнивает по типу переменных. А оператор строгого равенства === сравнивает численный код символа. Т.к. 2 идёт после 1 (имеет больший код к кодировке Unicode), то двойка больше.

Больше информации по ссылке: Сравнение строк

Answer 2

Немного спецификации, выдержка алгоритма по сравнению строк:

для случая x<y

Если оба операнда строки, тогда:
Если y - префикс x - вернуть false. (строка p является префиксом строки q, если q можно получить добавив к строке p другую строку r. Обратите внимание, что любая строка является префиксом для самой себя, так как r может быть пустой строкой.)
Если x - префикс y - вернуть true.

Пусть k наименьший не отрицательный индекс для которого код символа из строки x отличается от кода символа из строки y (такое k существует в случае, если никакая из сравниваемых строк не является префиксом другой.)

Пусть m - это код символа x[k]
Пусть n - это код символа y[k]
Если m < n, вернуть true. Иначе, вернуть false.

Обратите внимание: сравнение строк использует просто лексикографический порядок последовательностей кодов символов. Здесь нет попытки использовать более сложное, семантически ориентированных определений равенства строк или символов и схем упорядочения, определенные в спецификации Unicode. Поэтому строки, которые являются канонически эквивалентными согласно стандарту Unicode, могут быть неравными. Фактически этот алгоритм предполагает, что строки уже находятся в нормализованной форме. Кроме того, обратите внимание, что для строк, содержащих дополнительные символы, лексикографическое упорядочение значений кодов символов UTF-16 отличается от того же, для значений code point.

Применительно к коду в вопросе:

"2" > "15"

Строки не являются префиксами друг друга.

k == 0,

m = "2"[0] == '2' = 50
n = "15"[0] == '1' = 49

50 > 49 -> результат сравнения true.

READ ALSO
Async snotify axios in vuejs project

Async snotify axios in vuejs project

Пытаюсь разобраться с axios, обёрнутым в snotify в своём проекте на VueJSНашёл пример того, как можно поместить одно в другое, но возникает проблема...

176
Функция (Проверка на пустоту)

Функция (Проверка на пустоту)

Начинающий в js прошу сильно не пинать) функция по клику создает заголовок h4, так же вместе с заголовком создается ссылка с кнопкой удаления...

192
Как считать время в input с datetimepicker

Как считать время в input с datetimepicker

Имеется input с подключенным bootstrap datetimepickerТакже задается defaultDate в котором дата задается с помощью moment

168
Как удалить атрибут на JS Pure?

Как удалить атрибут на JS Pure?

Вот так выгрядит код на jQuery

167