当表达式不可能为TRUE时,表达式的计算结果为TRUE,是吗?

Jon*_*com 2 javascript evaluation logic expression operator-precedence

我有以下检查,看看是否应该将元素视为"悬停".

我很困惑,因为我看到元素设置为state === 'hover'不应该的时候.

alert消息更令人困惑,因为它告诉刚刚评估为true的表达式是不应该的表达式(如果您在逻辑上考虑它).

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 )

    );

}
Run Code Online (Sandbox Code Playgroud)

上面的代码会产生如下alert消息:

警报信息

当然,我们都同意580 <= 60 + 48评估FALSE,对吗?

然而警报仍被称为......

Rya*_*ugh 6

element.pos.x是一个字符串("60").您需要将它(以及比较中的所有其他字符串)转换回数字.