D'abord, par souci d'exhaustivité:
('0' ? 'a' : 'b')
est - 'a'
car '0'
est un non-vide de la chaîne, qui prend toujours la valeur true
:
Chaîne: Le résultat est faux si l'argument est une Chaîne de caractères vide (sa longueur est égale à zéro);
sinon, le résultat est vrai.
Maintenant, pour '0' == true
.
Deux conversions de type aura lieu ici. Nous pouvons suivre ce dans le cahier des charges, section 11.9.3, L'Abrégé de l'Égalité de l'Algorithme de Comparaison.
Les opérandes sont notées x
et y
(x == y
).
Dans notre cas, x
est une chaîne de caractères ('0'
) et y
est une valeur Booléenne (true
). Donc l'étape 7 est exécutée:
Si le Type(y) est un Booléen, retourner le résultat de la comparaison x == ToNumber(y).
Lorsque les booléens sont converties en nombres, la conversion suivante a lieu:
Booléen: Le résultat est 1 si l'argument est vrai. Le résultat est +0 si l'argument est faux.
Maintenant, nous avons
'0' == 1
qui correspond à la condition de l'étape 5:
Si le Type(x) est une Chaîne et le Type(y) est le Nombre, de retourner le résultat de la comparaison ToNumber(x) == y.
Comment les chaînes sont converties en nombres est plus complexe mais bien sûr, peut également être trouvée dans la spécification.
Donc la comparaison finale est
0 == 1
qui est - false
(de l'étape 1. un. vi.)