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 12/01/2012, 16h19   #1
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Par défaut Bizarrerie test comparaison

Après avoir passé plus de 10 minutes à chercher un bug dans mon code, j'ai trouvé pourquoi j'ai mis tant de temps à le trouver :

Code :
1
2
3
4
function ajout_bouton(){
	[...]
	(ajout_bouton.caller == H.HeroFrame.prototype.show); // false
	(H.HeroFrame.prototype.show == ajout_bouton.caller); // true
comment se fait-il qu'en comparant 2 fonctions (j'ai testé dans des conditions où l'égalité devrait être VRAIE) ça donne vrai dans un cas et faux en intervertissant les membres de gauche et de droite ?


nb: le bug se produit sous FF3.6 (et p-ê d'autres navigateurs/versions)


edit:
J'aurai du mal à vous donner tout le code car il est lié à un jeu par navigateur qui fait près de 100k lignes de codes mais toutes les pistes ou liens de sujets similaires sont les bienvenues, merci d'avance.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 16h33   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 071
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 071
Points : 45 202
Points : 45 202
et avec === ?
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 16h53   #3
Membre régulier
 
Inscription : décembre 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 61
Points : 83
Points : 83
Je viens de tester ce code dans FF3.6 et je ne reproduit pas ton bug...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function go(){
 
    console.log(go.caller, goroot);
    console.log(go.caller == goroot);
    console.log(goroot == go.caller);
    console.log(go.caller === goroot);
    console.log(goroot === go.caller);
}
function goroot(){
 
    go();
}
goroot();
TheGwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 18h47   #4
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par SpaceFrog Voir le message
et avec === ?
je n'ai pas testé, mais ça ne devrait pas changer grand chose, ça vérifie le type en plus de l’égalité et les deux coté étaient (en principe) de type(of) "function".


@TheGwy: en fait il s'agit d'un "userscript"(style "greasemonkey") qui modifie(surcharge) qqes fonctions dont "H.HeroFrame.prototype.show" pour lui rajouter un appel à "ajout_bouton".

c'était juste pour vérifier la fonction appelante mais soit, c'était p-ê un caratère caché qui s'était glissé dans mon code. sinon je ne vois par d'autres explications.

mais après qqes testes de savoir pourquoi on n'entrait pas dans ma condition, j'ai affiché des alert de tout et quand j'intervertissais les membres du test de comparaison ça me changeait le résultat, donc j'espérais avoir une piste d'explication de cas similaires, mais soit, j'ai résolu le problème en testant l'objet (this) pour éviter ce bug.


bref, si même TheGwy n'a jamais entendu parler de ce genre de problème, j'abandonne l'idée de trouver une explication et je passe en résolu.

Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 19h01   #5
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par SpaceFrog Voir le message
et avec === ?
je viens de récupérer une vieille version de mon script (qui plantait) et ça affiche bien "TRUE" dans tous les cas avec la triple égalité.

Résultat : je me pose encore plus de questions maintenant. (puisque la triple égalité ne peux pas être vraie si la double ne l'ait pas)
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h08.


 
 
 
 
Partenaires

Hébergement Web