[]==false // returns true
Cela évalue à true, en raison de l'Algorithme d'Égalité Abstrait tel que mentionné ici dans la Spécification ECMA #Section 11.9.3
Si vous parcourez l'algorithme mentionné ci-dessus.
Lors de la première itération, la condition satisfaite est,
Étape 7: Si le Type(y) est Boolean, retourner le résultat de la comparaison x == ToNumber(y).
Par conséquent, la condition ci-dessus se transforme en -> [] == 0
Maintenant, lors de la deuxième itération, la condition satisfaite sur [] == 0
:
Étape 9: Si le Type(x) est Object et le Type(y) est soit String ou Number, retourner le résultat de la comparaison ToPrimitive(x) == y.
[] est un objet, donc, en le convertissant en primitif, il se transforme en une chaîne vide ''
Ainsi, la condition ci-dessus se transforme en -> '' == 0
Lors de la troisième itération, la condition satisfaite est:
Étape 5: Si le Type(x) est String et le Type(y) est Number, retourner le résultat de la comparaison ToNumber(x) == y.
Comme nous le savons, une chaîne vide, ''
est une valeur falsy
, donc transformer une chaîne vide en un nombre nous renverra une valeur 0
.
Ainsi, notre condition se transformera en -> 0 == 0
Lors de la quatrième itération, la première condition est satisfaite, où les types sont égaux et les nombres sont égaux.
Par conséquent, la valeur finale du [] == false
se réduit à 0 == 0
qui est vrai.
J'espère que cela répond à votre question. Sinon, vous pouvez également consulter cette vidéo youtube