Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/10/2011, 04h13   #1
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 871
Points : 1 380
Points : 1 380
Par défaut Pour le fun !

Code :
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 :
1
2
3
4
5
var value = "0";
if(value == 0)
  VRAI;
if(!value)
  FAUX;
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2011, 07h55   #2
Membre habitué
 
Homme Mathias Philippe
Développeur Web
Inscription : septembre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Mathias Philippe
Localisation : Philippines

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2011
Messages : 75
Points : 121
Points : 121
Merci de partager tes lubies nocturnes.

En effet, ce genre de comportement étonnant pousse vraiment à utiliser "===" et "!==", d'autant plus que c'est le genre de bug bien chiant à pister ensuite.
MrPringle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2011, 14h21   #3
Expert Confirmé Sénior
 
Avatar de Auteur
 
Inscription : avril 2004
Messages : 4 795
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 4 795
Points : 5 119
Points : 5 119
Pour simple commentaire je citerai ta signature
Citation:
pourquoi faire simple quand on peut faire compliqué ?
Auteur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h47.


 
 
 
 
Partenaires

Hébergement Web