if ('11' < '3') alert('true');
Очевидно, что он не сравнивает их по длине, а вместо этого кодирует. Однако я не понимаю, как это работает. Мне нужно некоторое объяснение: -)
if ('11' < '3') alert('true');
Очевидно, что он не сравнивает их по длине, а вместо этого кодирует. Однако я не понимаю, как это работает. Мне нужно некоторое объяснение: -)
Строки сравниваются по символам до тех пор, пока они не будут равны, или нет каких-либо символов, которые можно сравнить. Первый символ "11" меньше первого символа "3".
> '11' < '3'
true
> '31' < '3'
false
> '31' < '32'
true
> '31' < '30'
false
Если мы будем использовать буквы, то, поскольку b
не меньше a
, abc
не меньше aaa
, но поскольку c
меньше d
, abc
меньше, чем abd
.
> 'abc' < 'aaa'
false
> 'abc' < 'abd'
true
Во многих языках программирования Строки сравниваются как лексикографически. Вы можете проверить Алфавитный порядок
Он сравнивается по каждому символу, будет false
:
if ('41' < '3') alert('true');
Так как 4
не меньше 3
. Таким образом, ваше сравнение сводилось к следующему:
if ('1' < '3') alert('true'); // true
'1' < '3'
, и поскольку первый символ является "самым значимым символом" (не означает, что этот термин имеет смысл). Любые последующие символы больше не будут сравниваться.
По умолчанию JavaScript будет сравнивать две строки по каждому порядковому значению символа; очень похоже на то, как strcmp()
работает в C.
Чтобы сделать вашу работу сравнения, вы можете отбросить любую сторону к числу, чтобы сообщить интерпретатору ваши намерения численного сравнения:
Number('11') < '3' // false
+'11' < '3' // false, using + to coerce '11' to a numeric
'11' < Number('3') // false
'11' < +'3' // false
Он рассматривался как сравнение строк. Таким образом, 1 < 3 (1-й символ двух строк), тогда строка 11 предшествует строке 3