Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if( "0" == !"0"){ // eh oui, c'est pourtant vrai^^ }
désolé, il 4h du mat et je m'ennuyais.
EDIT: Après relecture je trouve mes explications peu claires donc en gros à gauche nous avons un string que nous comparons à droite à un booléen puisque le ! inverse notre valeur au format booléen. Donc notre membre de droite vaut "false" puisque le string était true (non vide). Enfin notre égalité tente donc de comparer un string ( "0" ) à un booléen ( false ) le plus court chemin (casting de type ) entre les deux est l'entier. Car pour convertir notre string ( bon la machine ne réfléchit pas exactement comme ça, mais pas loin non plus ) il suffit d'enlever les apostrophes au membre de gauche pour obtenir l'entier ( 0 ) quant au membre de droite il peut également être directement traduit en entier car les valeurs booléennes true et false valent en réalité respectivement 1 et 0. Maintenant que nos valeurs sont de même type, elle peuvent être comparées, et aussi surprenant que cela puisse paraître, 0 est bien égal à 0.^^
nb: j'ai eu tellement de problème avec ces maudits "0" que je voulais le mettre sous une jolie forme ^^
pour infos :
Boolean('0'); // TRUE (car string2bool => ('0'.length) > 0)
Boolean(!'0'); // FALSE (car !(string2bool) )
Boolean('0'==false); // TRUE (car (string2int('0')==bool2int(false)==0) est vrai)
Boolean(!'0'==false); // TRUE (car !(string2bool)==false )
je vous laisse devenir cinglés !
edit: j'espère que TOUS ceux qui liront ça, utiliseront dorénavant TOUJOURS les opérateurs "===" et "!==".
edit2: et un exemple concret bien chiant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var value = "0"; if(value == 0) VRAI; if(!value) FAUX;
Partager