2 votes

Une expression est évaluée à VRAI alors qu'elle ne peut pas être VRAIE, n'est-ce pas ?

J'ai le contrôle suivant pour savoir si un élément doit être considéré comme "survolé" ou non.

Je suis très confus parce que je vois des éléments définis comme étant state === 'hover' alors qu'ils ne devraient pas l'être.

Le site alert est encore plus déroutant car il indique que l'expression qui vient d'être évaluée à true ne devrait pas l'être (si vous y réfléchissez logiquement).

if( (ig.gui.cursor.pos.x >= element.pos.x) 
    && (ig.gui.cursor.pos.x <= element.pos.x + element.size.x)
    && (ig.gui.cursor.pos.y >= element.pos.y) 
    && (ig.gui.cursor.pos.y <= element.pos.y + element.size.y) 
    && !element.disabled ) {

    state = 'hover';

    alert(

        'This statement evaluates to true: '

        + ig.gui.cursor.pos.x
        + '>='
        + element.pos.x
        + '&&'
        + ig.gui.cursor.pos.x
        + '<='
        + element.pos.x
        + '+'
        + element.size.x
        + '&&'

        + ig.gui.cursor.pos.y
        + '>='
        + element.pos.y
        + '&&'
        + ig.gui.cursor.pos.y
        + '<='
        + element.pos.y
        + '+'
        + element.size.y
        + '&&'

        + ( !element.disabled )

    );

}

Le code ci-dessus donne comme résultat alert des messages comme celui-ci :

alert message

Nous sommes tous d'accord pour dire que 580 <= 60 + 48 évalue à FALSE n'est-ce pas ?

Et pourtant l'alerte a été donnée...

6voto

Ryan Cavanaugh Points 17393

element.pos.x est une chaîne de caractères ("60"). Vous devrez la reconvertir (ainsi que toutes les autres chaînes de caractères dans les comparaisons) en un nombre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X