Forum Programmation.web Quand javascript se vautre silencieusement sous Firefox

Posté par  . Licence CC By‑SA.
Étiquettes :
1
27
jan.
2014

Bonjour all,

un code simple (avec JQuery) qui me permet de passer d'une "diapo" à une autre lors d'un click sur le bouton "next" en fonction de la position du scroll :

    var $nextButton = $('#next');
    $nextButton.click(function() {
        var hgt = $(document).scrollTop();
        var upto = 22000;

        if (htg>19000) {
            upto = 19000;
        } else if (hgt<=19000 && hgt>15300) {
            upto = 15300;
        }

        alert("from "+hgt+" to "+upto);
        $('html, body').animate({ scrollTop:upto }, 7000);
    });

Comme vous ne l'avez sûrement pas relevé, mon premier if comporte une erreur, htg au lieu de hgt. Forcément ça ne fonctionne pas mais Firefox ne me dit rien ! Alors que Chromium m'averti que htg is not defined .

C'est un bug de FF ou j'ai raté quelque chose ?

  • # cast implicite

    Posté par  . Évalué à 1.

    C'est firefox qui a le bon comportement, les "undefined" se castent automatiquement en "false"

    • [^] # Re: cast implicite

      Posté par  . Évalué à 1.

      Le problème c'est que l'exécution s'arrête sur cette ligne. Le alert n'est pas exécuté, donc il devrait le signaler …
      (Firefox 26.0 , je n'ai pas testé d'autres versions)

    • [^] # Re: cast implicite

      Posté par  (site web personnel) . Évalué à 4.

      Euh non. Une variable undefined c'est quand quelque part on a au moins "var htg;" sans assignation. Mais quand la variable n'a pas été référencée du tout, ça lance une exception ReferenceError quand on essaye d'y accéder.

      Par contre, si htg est indéfini mais référencé via "var htg;" alors on ne rentrerait pas dans "if(htg)" mais on rentrerait dans un "if(!htg)". Enfin, c'est plus compliqué que ça. Voir http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

      Le Javascript est plein de subtilités à la con qui rendent fou :)

      L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

  • # Exception ReferenceError

    Posté par  (site web personnel) . Évalué à 3.

    Que ce soit Firefox ou Chrome, il lance tous les deux l'exception "ReferenceError" et dans leur console à tous les deux on peut lire "ReferenceError: htg is not defined" et le alert suivant n'est pas exécuté. Je ne sais pas où tu regardes dans Firefox, mais il te prévient tout comme Chrome.

    L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

    • [^] # Re: Exception ReferenceError

      Posté par  . Évalué à 1.

      Je te remercie pour ton aide. Je sais encore ce que je dis la console de mon FF26 ne me dit strictement rien contrairement à celle de Chromium :

      FF Bug

    • [^] # Re: Exception ReferenceError

      Posté par  . Évalué à 3.

      D'après Shift ça peut être totalement dépend de l'environnement d'exécution, tu ne peux donc pas être certains de ce qui s'est passé avant (si ça se trouve jQuery ou une autre lib crée une variable de ce nom là, voir mieux si c'est possible (ça ne m'étonnerais même pas que ça le soit) interfère avec le comportement de l'interpréteur pour récupérer toutes les ReferenceError).

      Va aller vomir…

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # Pour la prochaine fois

    Posté par  (site web personnel) . Évalué à 5.

    Je te conseille de développer en mode strict avec l'instruction "use strict", comme ça tu auras des erreurs plus souvent;

    Ensuite tu devrais envisager l'utilisation d'un outil comme JSHint. C'est très pénible au début mais ça permet d'éviter de nombreuses erreurs et de perdre ses mauvaises habitudes.

    http://www.jshint.com/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.