Может кто-нибудь объяснить, почему условие '12:34' < '123:45'
равно false
?
console.log('12:34' < '123:45' ? 'true' : 'false')
Может кто-нибудь объяснить, почему условие '12:34' < '123:45'
равно false
?
console.log('12:34' < '123:45' ? 'true' : 'false')
Из-за кода ASCII 3
и :
. Мы знаем, что сравнение строк будет производиться по правилу словаря. Следовательно, поскольку первое различие находится в третьем месте двух строк, код ASCII 3
и :
будет определять результат сравнения. Поскольку код ASCII :
больше 3
, в результате вы видите ложь. См. Их код ASCII ниже.
console.log(":".charCodeAt(0));
console.log("3".charCodeAt(0));
В строке есть не только числа, поэтому она будет сравниваться со строкой, а не с числом. Когда строка сравнивается, она начинает оценивать одну за другой.
Итак, в вашем случае третий символ - это :
и 3
. Теперь сравнение обоих приведет к тому, что false
- 3 больше, чем :
(NaN), при условии, если он сравнивается по Number на шаге. Фактически, JavaScript сравнивает его с charCodeAt
, как упоминалось в другом ответе. В любом случае это false
. Как вы ожидаете, что это будет правдой?
Я нашел на этом page, что если вы сравниваете две строки, JavaScript сравнивает числовые коды символов в строке один за другим.
Строки будут равны до второго индекса, где у одного есть :
, а у другого 3
. Сравните два с charCodeAt()
.
'12:34'.charCodeAt(2) // => 58
'123:34'.charCodeAt(2) // => 51
Поскольку :
имеет более крупный код символа, эта строка считается более крупной, чем другая.
Код ASCII "3"
- 51
, ":"
- 58
.
Когда :
стоит перед 3
, JavaScript предполагает, что вы говорите 58 < 51
, то есть false
.
'12:34'.localeCompare('123:45')
, что даст вам-1
в качестве результата, что означает, что"12:34"
идет до"123:45"
. MDN localeCompare - person Roko C. Buljan   schedule 04.08.2020