Почему работает сравнение строковых значений недопустимых чисел?

Я играл со сравнением кодов версий в JS и обнаружил, что эти типы сравнений работают последовательно, и я понятия не имею, почему:

"3.4.06" < "3.4.02"   (false)
"3.3.01" < "3.4.02"   (true)
"3.3.01" > "3.4.02"   (false)
"3.5.2"  < "3.4.1"    (false)
"3.5.2"  > "3.4.0015" (true)

Это явно недействительные числа в javascript, но каким-то образом движок JS сравнивает строковые значения таким образом, чтобы все работало. Может ли кто-нибудь дать некоторое представление о том, как это делает движок JS? Я работаю на V8.


person Evan Wieland    schedule 12.09.2019    source источник
comment
javascript.info/comparison Javascript сравнивает строки побуквенно. И, как вы, возможно, знаете, символ — это, по сути, число в памяти.   -  person Dimitri Bosteels    schedule 12.09.2019
comment
Он просто выполняет лексикографическую проверку посимвольно. 3 предшествует 4, поэтому "3" < "4" завершается успешно. Однако это означает, что "4" < "30" равно false, поскольку 4 идет после 3.   -  person VLAZ    schedule 12.09.2019
comment
лексический против числового. Укусы сравниваются лексически. Итак, "100" < "9", потому что 1 предшествует 9, а 100 не считается одним целым. Numerical сравнит значение всего числа, где 100 > 9   -  person Shilly    schedule 12.09.2019
comment
Потрясающий! Я понятия не имел о лексическом сравнении. Спасибо за понимание!   -  person Evan Wieland    schedule 12.09.2019


Ответы (1)


Потому что JavaScript сравнивает каждый символ по порядку. Скажем, "10" > "2", он вернет false, потому что JS сначала сравнивает "1">"2", а затем дает false

person JPeter    schedule 12.09.2019