96 votes

Pourquoi "true" == vrai montre faux en JavaScript ?

Le MDC décrit le == opérateur comme suit :

Si les deux opérandes ne sont pas du même type, JavaScript convertit les opérandes puis applique une comparaison stricte. Si l'un des opérandes est un nombre ou un booléen, les opérandes sont convertis en nombres si possible ; sinon, si l'un des opérandes est une chaîne de caractères, l'autre opérande est converti en chaîne de caractères si possible.

Dans cette optique, j'évaluerais "true" == true comme suit :

  1. Sont-ils du même type ? Non
  2. L'un des opérandes est-il un nombre ou un booléen ? Oui
  3. Peut-on convertir les deux en un nombre ? Non ( isNaN(Number("true")) // true )
  4. L'un des deux opérandes est-il une chaîne de caractères ? Oui
  5. Peut-on convertir l'autre opérande en une chaîne de caractères ? Oui ( String(true) === "true" // true )

Je me suis retrouvé avec les cordes "true" et "true" ce qui devrait donner true mais JavaScript montre faux.

Qu'est-ce que j'ai manqué ?

94voto

MaxArt Points 8278

Parce que "true" est converti en NaN alors que true est converti en 1 . Ils diffèrent donc.

Comme vous l'avez signalé, les deux sont convertis en chiffres, parce qu'au moins true peuvent être (voir le commentaire d'Erik Reppen), et ensuite comparées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X