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

189
14 июля 2017, 06:14

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

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

"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
Как правильно вызвать функцию при ajax?

Как правильно вызвать функцию при ajax?

При клике на блок с классом main-block ajaxом добавляются элементыФункция, которая отрабатывает при клике на элемент, который добавляется ajax

170
Проверка заполненности поля JS

Проверка заполненности поля JS

Необходимо проверить заполненность полей и запретить отправку формы, если есть пустые

237
Кто поможет с string.replace (JS)?

Кто поможет с string.replace (JS)?

Почему происходит оборачивание первого совпадения два раза?

175
Как в curl отправить данные request payload?

Как в curl отправить данные request payload?

Здравствуйте! В отладчике хрома вижу response с нужными мне параметрами

302