Por que a string “11” é menor que a string “3”?

if ('11' < '3') alert('true'); 

É óbvio que não é compará-los por tamanho, mas por codificação. No entanto, não entendo como isso funciona. Eu preciso de alguma explicação 🙂

As cordas são comparadas personagem por personagem até que elas não sejam iguais ou não existam personagens para comparar. O primeiro caractere de ’11’ é menor que o primeiro caractere de ‘3’.

 > '11' < '3' true > '31' < '3' false > '31' < '32' true > '31' < '30' false 

Se usarmos letras então, já que b não é menor que a , abc não é menor que aaa , mas desde que c é menor que d , abc é menor que abd .

 > 'abc' < 'aaa' false > 'abc' < 'abd' true 

Em muitas linguagens de programação As cadeias são comparadas como lexicograficamente . Você pode verificar Ordem alfabética

Compara por cada caractere, o seguinte será false :

 if ('41' < '3') alert('true'); 

Desde 4 não é menor que 3 . Então, essencialmente, sua comparação se resumia a isso:

 if ('1' < '3') alert('true'); // true 

'1' < '3' e desde que o primeiro caractere é o "personagem mais significativo" (não que este termo faça algum sentido). Qualquer um dos seguintes caracteres não será mais comparado.

Por padrão, o JavaScript irá comparar duas seqüências de caracteres pelo valor ordinal de cada caractere; muito parecido como strcmp() funciona em C.

Para fazer o seu trabalho de comparação, você pode converter qualquer lado para um número para informar ao intérprete suas intenções de comparação numérica:

 Number('11') < '3' // false +'11' < '3' // false, using + to coerce '11' to a numeric '11' < Number('3') // false '11' < +'3' // false 

Foi tratado como uma comparação de string. Então 1 <3 (primeiro chars de duas cordas) então string 11 precede string 3