web-dev-qa-db-fra.com

Pourquoi la chaîne "11" est-elle inférieure à la chaîne "3"?

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 :-)

23
jilseego

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
41
Quentin

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
4
Ja͢ck

Dans de nombreux langages de programmation, les chaînes sont comparées comme suit: lexicographiquement . Vous pouvez vérifier Ordre alphabétique

4
Ramesh Kotha

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
3
Sarfraz

'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.

2
ThiefMaster

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

0
Rajasekhar