【发布时间】:2012-12-20 02:22:48
【问题描述】:
我有以下检查,看看一个元素是否应该被视为“悬停”。
我很困惑,因为我看到元素设置为state === 'hover',而它们不应该设置为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 )
);
}
上面的代码导致alert这样的消息:
当然,我们都同意580 <= 60 + 48 的计算结果为FALSE,对吧?
然而警报仍然被调用...
【问题讨论】:
-
使用
console.log()确认你错了(不是alert()) -
你确定它们都是整数吗?因为我可以看到字符串 "5.."
-
您比较中的任何值都可能是字符串吗?
-
可以肯定的是,不要做
+ element.pos.x + '+' + element.size.x做+ (element.pos.x + element.size.x)看看你会得到什么
标签: javascript logic expression evaluation operator-precedence