Aller au contenu

Opérateurs de comparaison JavaScript

Les opérateurs de comparaison en JavaScript sont essentiels pour prendre des décisions dans votre code en comparant des valeurs. Ce guide propose une exploration approfondie des opérateurs de comparaison JavaScript, enrichie d’exemples pratiques, d’explications claires et d’un focus particulier sur certains comportements inhabituels pouvant apparaître avec certaines comparaisons de types de données.

Introduction aux opérateurs de comparaison

Les opérateurs de comparaison comparent deux valeurs et renvoient une valeur Boolean (true ou false) selon que la comparaison est vraie. Il existe plusieurs opérateurs de comparaison clés en JavaScript :

  • == (égalité faible)
  • === (égalité stricte)
  • != (inégalité faible)
  • !== (inégalité stricte)
  • > (supérieur à)
  • < (inférieur à)
  • >= (supérieur ou égal à)
  • <= (inférieur ou égal à)

Chaque opérateur a un rôle spécifique, et comprendre les différences entre eux est crucial pour programmer avec précision.

Comparaison faible vs. stricte

Égalité faible (==)


Output appears here after Run.

Explication : Ici, 1 et "1" semblent différents (l’un est un nombre et l’autre une chaîne), mais == convertit les deux en un même type avant de les comparer. C’est pourquoi ils sont considérés comme égaux.

Égalité stricte (===)


Output appears here after Run.

Explication : Cette fois, 1 et "1" ne sont pas considérés comme égaux, car === vérifie si la valeur et le type sont exactement identiques. Ici, ils ne sont pas du même type.

Opérateurs d’inégalité

Inégalité faible (!=)


Output appears here after Run.

Explication : 1 et "2" sont différents. != convertit aussi les types pour comparer, mais comme les valeurs restent différentes après conversion de type, il renvoie true.

Inégalité stricte (!==)


Output appears here after Run.

Explication : Ici, !== considère les valeurs comme différentes parce qu’il effectue la comparaison sans changer le type. Comme les types (nombre vs chaîne) sont différents, il renvoie true.

Opérateurs relationnels


Output appears here after Run.

Explication : Ces exemples montrent des comparaisons de base :

  • x < y est true parce que 5 est inférieur à 10.
  • x > y est false parce que 5 n’est pas supérieur à 10.
  • x <= 5 est true parce que 5 est égal à 5.
  • y >= 11 est false parce que 10 n’est pas supérieur ou égal à 11.

Remarque sur la comparaison de chaînes : Lorsque < et > sont utilisés avec des chaînes, JavaScript les compare lexicographiquement (par valeur Unicode). Par exemple, 'b' > 'a' est true, mais '10' < '2' est aussi true parce que la comparaison se fait caractère par caractère.

Applications pratiques des opérateurs de comparaison

Fonctions de tri


Output appears here after Run.

Explication : Ce code trie les nombres par ordre croissant. La fonction sort compare chaque paire de nombres et les organise du plus petit au plus grand.

Logique conditionnelle


Output appears here after Run.

Explication : Ce code vérifie si age est supérieur ou égal à 18. Si oui, il affiche "You are an adult." Sinon, il affiche "You are not an adult."

Les comportements étranges de JavaScript

JavaScript affiche parfois un comportement étrange lors de la comparaison de types de données inhabituels :


Output appears here after Run.

Explication :

  • [] == 0 : Un tableau vide est considéré comme égal à zéro, car lorsqu’il est converti en nombre, il devient 0.
  • [] == ![] : Cela semble très étrange, mais voici ce qui se passe : ![] convertit le tableau en booléen (qui est true parce que les tableaux sont truthy), puis l’inverse en false. Lors de la comparaison de [] à false, les deux sont convertis en nombres (0 et 0), donc ils sont "égaux".

Voyons plus d’exemples du comportement inhabituel de JavaScript dans les comparaisons et d’autres opérations.

Comparaison des tableaux et des objets

Les comparaisons d’égalité faible de JavaScript peuvent produire des résultats inattendus lors de la comparaison de tableaux et d’objets, en raison de la manière dont ces structures de données sont converties et comparées.


Output appears here after Run.

Explication :

  • [] == [] et {} == {} : Même si les deux côtés de la comparaison semblent identiques, ce sont des instances différentes en mémoire. JavaScript vérifie l’égalité des objets et des tableaux en fonction de leur adresse mémoire, et non de leur contenu.
  • [] == ![] : Ce cas suit les mêmes règles de coercition expliquées dans la section précédente.

Null vs. Undefined

La comparaison entre null et undefined avec l’égalité faible montre aussi un comportement inhabituel, mais ils partagent tout de même certaines მსგავსances en JavaScript.


Output appears here after Run.

Explication :

  • null == undefined : JavaScript traite null et undefined comme égaux au sens faible, ce qui constitue une exception dans les règles de l’égalité faible.
  • null === undefined : Comme ils sont de types différents, l’égalité stricte renvoie false.
  • null == 0, null > 0 et null >= 0 : Dans les comparaisons relationnelles, null est converti en 0, donc null >= 0 devient 0 >= 0, ce qui s’évalue à true. Cependant, null == 0 et null > 0 restent false parce que null n’est converti en 0 que dans les contextes relationnels, pas dans l’égalité faible.

Comparaisons entre booléens et non-booléens

Comparer des booléens à des non-booléens avec l’égalité faible peut conduire à des résultats contre-intuitifs en raison de la coercition de type en nombres.


Output appears here after Run.

Explication :

  • true == 1 et false == 0 : En JavaScript, true se convertit en 1 et false en 0, d’où le résultat true pour ces comparaisons.
  • true == 2 : Comme true se convertit en 1, il n’est pas égal à 2.
  • true == "1" et false == "0" : Les chaînes sont converties en nombres, ce qui correspond aux nombres vers lesquels true et false se convertissent.

Utiliser Object.is pour les comparaisons

Pour ceux qui ont besoin de comparaisons précises, notamment avec des cas limites comme NaN et +0 vs -0, JavaScript fournit Object.is.


Output appears here after Run.

Explication :

  • Object.is(NaN, NaN) : Contrairement aux opérateurs d’égalité, Object.is identifie correctement deux valeurs NaN comme identiques.
  • Object.is(+0, -0) : Object.is distingue le zéro positif du zéro négatif, contrairement aux opérateurs d’égalité.
  • Object.is(false, false) : Montre une égalité exacte sans coercition, en renvoyant true pour des valeurs primitives identiques.

Comprendre ces comportements étranges en JavaScript aide non seulement à éviter des pièges potentiels, mais améliore aussi la capacité à déboguer efficacement des problèmes complexes.

Ces exemples illustrent pourquoi il est souvent plus sûr d’utiliser les opérateurs de comparaison stricts (=== et !==) qui ne convertissent pas automatiquement les types. Cela aide à éviter des résultats inattendus dans votre code JavaScript.

WARNING

Utilisez les opérateurs de comparaison stricts (=== et !==) en JavaScript pour garantir l’exactitude du type et de la valeur. Cela évite la coercition de type involontaire, rendant vos comparaisons plus prévisibles et plus fiables. Par exemple, 0 === '0' renvoie false, ce qui souligne l’importance de faire correspondre les types.

Bonnes pratiques

  • Privilégier les opérateurs stricts : Utilisez === et !== pour éviter les erreurs dues à la conversion automatique de type.
  • Conditions claires : Rendez vos conditions claires et simples, surtout lorsqu’elles impliquent des comparaisons.
  • Tester les cas limites : Vérifiez toujours les cas limites dans vos comparaisons, en particulier lors du traitement des entrées utilisateur ou de types de données variables.

Conclusion

Comprendre les opérateurs de comparaison en JavaScript est crucial pour prendre les bonnes décisions dans vos programmes. En suivant ces recommandations et en comprenant à la fois les comportements typiques et atypiques, vous pouvez écrire un code plus fiable et plus prévisible. Au fur et à mesure que vous explorez JavaScript, utilisez ces opérateurs avec discernement pour gérer efficacement divers défis de programmation.

Practice

Which of the following comparison operators can be used in JavaScript?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.