IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Comparaison du retour de fonctions d'objet


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Par défaut Comparaison du retour de fonctions d'objet
    Bonjour,
    L'exemple suivant me retourne false sans que je comprenne pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var obj = {
        x:1,
        y:2,
        sX:1,
        sY:2,
        f:function() { return [this.x,this.y] },
        g:function() { return [this.sX,this.sY] }
    };
    alert(obj.f() == obj.g()); // retourne false (expected : true)
    Quelqu'un s'aurait-il m'expliquer ? Ça doit être assez simple, vu que je suis une pive... Je me dis que c'est parce qu’il compare autre chose que les retours...

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    Salut

    ... Je me dis que c'est parce qu’il compare autre chose que les retours...
    si au contraire, il compare la méthode et les arguments du return.
    Enfin je pense, car si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        f:function() { return "A" },
        g:function() { return "B" }
    retourne false, mais si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        f:function() { return "A" },
        g:function() { return "A" }
    retourne true.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    dans le cas de LeGourdin les fonctions retournent un Array, donc comparer deux Array comme c'est écrit ne signifie pas que l'on teste le contenue mais la référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const t1 = [1, 2, 3];
    const t2 = t1;
    const t3 = [1, 2];
    console.log(t1 == t2);
    console.log(t1 === t2);  // comparaison stricte
    console.log(t1 == t3);
    donnera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > true
    > true
    > false
    dans le cas de ProgElecT, il y a effectivement comparaison de valeur, donc pas de soucis.

    Nota : Pour faire la comparaison de deux Array on peut faire un truc simple comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(JSON.stringify(t1) == JSON.stringify(t2));   //> true

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Par défaut
    Merci bcp pour cet éclairage.
    Du coup, j'avais effectivement cherché dans cette direction et résolu mon problème avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t1.join() == t2.join() // -> true
    Je noterais encore ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    t1 = [1,2,3];
    t2 = t1;
    t3 = [1,2,3];
    t1 == t2 // true
    t1 == t3 // false
    A plus et merci encore :-)

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Citation Envoyé par LeGourdin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t1.join() == t2.join() // -> true
    Pourquoi pas, mais utilise un séparateur judicieusement choisi car sinon [12].join() == [1,2].join() renverra aussi true.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison du retour d'une fonction impossible
    Par dubitoph dans le forum Langage
    Réponses: 12
    Dernier message: 14/07/2009, 12h36
  2. Réponses: 9
    Dernier message: 22/07/2006, 22h51
  3. Utilisation d'un retour de fonction dans un decode
    Par CFVince dans le forum Oracle
    Réponses: 4
    Dernier message: 20/10/2005, 17h22
  4. Référence en retour de fonction, à transformer en hash
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 15/07/2005, 14h24
  5. [POO] fonction toUpperCase : Objet attendu
    Par LineLe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/04/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo