le pas de laisser passer vos exemples:
!!" " == true // => true
Vous avez converti la chaîne "" en un booléen en l'annulant. Une chaîne de longueur différente de zéro sera évaluée à true lorsqu'elle sera convertie en booléen, donc l'annuler deux fois donnera la valeur booléenne true. true == true
évidemment. Cet exemple n'aboutit pas à la conversion du deuxième paramètre en chaîne car l'opérateur unaire !
a une priorité supérieure à l'opérateur ==
. Par conséquent, lorsque l'opérateur ==
est évalué, les deux opérandes sont du même type (booléen).
" " == true // => false
Per documents Mozilla (section correspondante représentée sur la patrick dw's answer), les deux opérandes sont convertis en un nombre si l'opérande est un nombre ou une valeur booléenne. Vous vous retrouvez avec 0 == 1
, ce qui est faux.
Dans ce cas, je crois que le
deuxième paramètre est converti en une chaîne. Vous faites essentiellement
" " == "true"
, ce qui est faux. C'est une comparaison de chaînes, pas une comparaison de chaîne et booléen.
if (" " == true){a = 1;} else {a = 0;}
C'est le même que le précédent: l'un des opérandes est un booléen, afin que les deux valeurs sont converties en un nombre.
if (" "){b = 1;} else {b = 0;}
Ceci est le même que le premier. La chaîne est contrainte dans une valeur booléenne. La chaîne a une longueur différente de zéro, donc elle retourne vrai.
Demandez-vous sur les valeurs de Falsey? – annakata