MDC décrit l'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, l'autre opérande est converti en chaîne si possible.
Dans cet esprit, j'évaluerais "true" == true
Comme suit:
isNaN(Number("true")) // true
)String(true) === "true" // true
)Je me suis retrouvé avec les chaînes "true"
Et "true"
, Qui devraient être évaluées à true
, mais JavaScript affiche false.
Qu'est-ce que j'ai raté?
Car "true"
est converti en NaN
, tandis que true
est converti en 1
. Ils diffèrent donc.
Comme vous l'avez signalé, les deux sont convertis en nombres, car au moins true
peut l'être (voir le commentaire d'Erik Reppen), puis comparés.
== opérateur de comparaison défini dans Ecma 5 comme
Donc, "true" == true est interprété par le moteur js comme
===> faux
Selon l'algorithme de comparaison d'égalité abstraite
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.
si l'une des tendances est un booléen et que l'autre ne l'est pas, le booléen est le convertisseur en nombre 0 ou 1. so true == "true"
c'est faux.