Opérateurs de comparaison ECMAScript
- Page précédente Opérateurs additifs
- Page suivante Opérateurs d'égalité
Les opérateurs de comparaison effectuent des opérations de comparaison. Chaque opérateur de comparaison retourne une valeur booléenne.
Méthode de comparaison conventionnelle
Les opérateurs de comparaison (inférieur, supérieur, inférieur ou égal, supérieur ou égal) effectuent des opérations de comparaison de deux nombres, de la même manière que les opérations de comparaison arithmétique.
Chaque opérateur de relation retourne une valeur booléenne :
var bResult1 = 2 > 1 //true var bResult2 = 2 < 1 //false
Cependant, l'application d'un opérateur de relation à deux chaînes de caractères produit un comportement différent. Beaucoup de gens pensent que "inférieur" signifie "avant dans l'ordre alphabétique" et "supérieur" signifie "après dans l'ordre alphabétique", mais ce n'est pas le cas. Pour les chaînes de caractères, chaque caractère de la première chaîne est comparé au caractère de la position correspondante de la deuxième chaîne en termes de code. Après avoir terminé cette opération de comparaison, un booléen est retourné. Le problème est que les codes des lettres majuscules sont tous inférieurs aux codes des lettres minuscules, ce qui peut entraîner les situations suivantes :
var bResult = "Blue" < "alpha"; alert(bResult); //Affiche true
Dans l'exemple précédent, la chaîne "Blue" est inférieure à "alpha", car le code de caractère de la lettre B est 66 et celui de la lettre a est 97. Pour obtenir un résultat de comparaison alphabétique véritable, il est nécessaire de convertir les deux nombres en forme de casse identique (en majuscules ou en minuscules) avant de les comparer :
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); //Sortie false
En convertissant les deux opérateurs en minuscules, on assure une identification correcte de "alpha" avant "Blue" dans l'ordre alphabétique.
Comparaison de nombre et de chaîne
Une autre situation difficile se produit lors de la comparaison de deux nombres sous forme de chaîne, par exemple :
var bResult = "25" < "3"; alert(bResult); //Sortie "true"
Ce code compare les chaînes "25" et "3". Les deux opérateurs sont des chaînes, donc on compare leurs codes de caractères (le code de "2" est 50, et le code de "3" est 51).
Cependant, si l'un des opérateurs est un nombre, le résultat est intéressant :
var bResult = "25" < 3; alert(bResult); //Sortie "false"
Ici, la chaîne "25" est convertie en nombre 25, puis comparée au nombre 3, le résultat est comme prévu.
Quand on compare un nombre et une chaîne, ECMAScript convertit toujours la chaîne en nombre et les compare en ordre numérique.
Cependant, que faire si une chaîne ne peut pas être convertie en un nombre ? Considérez l'exemple suivant :
var bResult = "a" < 3; alert(bResult);
Pouvez-vous prévoir ce que sortira ce code ? Le caractère "a" ne peut pas être converti en un nombre significatif. Cependant, si on appelle la méthode parseInt() sur lui, le résultat est NaN. Selon les règles, tout opérateur de relation contenant NaN doit retourner false, donc ce code aussi sort false :
var bResult = "a" >= 3; alert(bResult);
Généralement, si les deux valeurs d'une opération inférieure retournent false, alors l'opération supérieure ou égale doit retourner true, mais si un certain nombre est NaN, la situation n'est pas la même.
- Page précédente Opérateurs additifs
- Page suivante Opérateurs d'égalité