Сравнение «буквенных» и «числовых» строк. Как происходит?

Пишется в основном про сравнение строк со строками, чисел с числами, строк и чисел, когда строка представляет из себя цифры. НО ничего не говорится про тот случай, когда строка состоит из букв.

Вот к примеру результат этого выражения false.
console.log("abcd" < "123");

Почему? При использовании этого сравнительного оператора идет перевод в числа. "123" можно перевести, а "abcd" – нельзя (NaN). Результат NaN считается за 0? Хотя все-таки если бы это было так, то результат должен был бы быть true (0 < 123).
  • Вопрос задан
  • 1600 просмотров
Решения вопроса 1
Simkav
@Simkav
В вашем случае 123 не число а строка, при сравнении строк запускается цикл который переводит символ строки в юникод если не ошибаюсь, и сравнивается номер этих юникод символов
P.S
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Про сравнение, к сожалению, только на английском: оператор «меньше»

  • если обе части — строки, то сравниваются Unicode коды
  • иначе JS попытается привести к числу не-числовые аргументы
  • .. если при этом где-то получился NaN, вернёт false
  • .. а так сравнит как числа


В примере в вопросе как раз обе части – строки, т.к. в кавычках.
"a" имеет код 97
"1" имеет код 49

"a" больше.

Получить код символа можно методом строки codePointAt():
"1a".codePointAt(0) // 49 - ascii и Unicode код символа "1"
"1a".codePointAt(1) // 97 - ascii и Unicode код символа латинской маленькой "a"

А вот с NaN вообще беспорядок:
123 < "Z"  // false
123 > "Z"  // тоже false
Ответ написан
Комментировать
Legalas61
@Legalas61
Студент
Про сравнение лексики https://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D...

Результат NaN считается за 0?
Начальным значением NaN является Not-A-Number (не-число) — то же самое значение, что и у Number.NaN. Грубо говоря если в JS чего-то нет, то это == 0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы