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

标签 javascript logic expression evaluation operator-precedence

我进行了以下检查,以查看某个元素是否应被视为“悬停”。

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

alert message 更加令人困惑,因为它告诉我们刚刚计算为 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 )

    );

}

以上代码的结果是 alert像这样的消息:

alert message

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

但警报仍然被调用...

最佳答案

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

关于javascript - 当表达式不可能为 TRUE 时,它的计算结果为 TRUE,不是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13964369/

相关文章:

javascript - VueJS Uncaught ReferenceError

javascript - 使用play()时HTML Audio停止IOS音乐播放器

javascript - 如何在JavaScript中转换日期格式?

mysql - 数据库设计 - 员工打卡和下类系统

SSIS 派生列表达式

java - 类名是表达式吗?

用于渲染代码的 javascript 书签

algorithm - 同时验证多个 pawn 在 2D 网格上的移动

javascript - JavaScript 中超过特定​​输入值时的百分比

c# - 表达式树使用类的属性值创建字典