if ('11' < '3') alert('true');
Il est évident que ce n'est pas en les comparant par longueur mais par encodage. Cependant, je ne comprends pas comment cela fonctionne. J'ai besoin d'explications :-)
Les chaînes sont comparées caractère par caractère jusqu'à ce qu'elles ne soient plus égales ou qu'il ne reste plus aucun caractère à comparer. Le premier caractère de '11' est inférieur au premier caractère de '3'.
> '11' < '3'
true
> '31' < '3'
false
> '31' < '32'
true
> '31' < '30'
false
Si nous utilisons des lettres alors, puisque b
n’est pas inférieur à a
, abc
n’est pas inférieur à aaa
, mais puisque c
est inférieur à d
, abc
est inférieur à abd
.
> 'abc' < 'aaa'
false
> 'abc' < 'abd'
true
Par défaut, JavaScript compare deux chaînes en fonction de la valeur ordinale de chaque caractère. un peu comme la façon dont fonctionne strcmp()
en C.
Pour que votre comparaison fonctionne, vous pouvez attribuer à chaque partie un numéro afin d'indiquer à l'interprète vos intentions en matière de comparaison numérique:
Number('11') < '3' // false
+'11' < '3' // false, using + to coerce '11' to a numeric
'11' < Number('3') // false
'11' < +'3' // false
Dans de nombreux langages de programmation, les chaînes sont comparées comme suit: lexicographiquement . Vous pouvez vérifier Ordre alphabétique
Il compare par chaque caractère, ce qui suit sera false
:
if ('41' < '3') alert('true');
Puisque 4
n'est pas inférieur à 3
. Donc, essentiellement, votre comparaison se résumait à ceci:
if ('1' < '3') alert('true'); // true
'1' < '3'
et puisque le premier caractère est le "caractère le plus significatif" (ce terme n’a aucun sens). Tous les personnages suivants ne seront plus comparés.
Cela a été traité comme une comparaison de chaînes. Donc 1 <3 (premiers caractères de deux chaînes) puis la chaîne 11 procède à la chaîne 3