对于一个使用三元运算符的表达式,我得到了一个奇怪的结果

I am getting a strange result for an expression with ternary operator

本文关键字:结果 一个 表达式 于一个 运算符 三元      更新时间:2023-09-26

当在keyUp事件中按下shift键时,当我试图更改k代码时,下面的表达式得到了一个奇怪的值。

var k=39-(e.shiftKey)?2:0;结果:2

但是,当它被包围的括号使用时,它工作得很好

var k=39-(e.shiftKey)?2:0);结果:37

请注意,造成这种情况的根本原因是什么,为什么第一个表达式根本没有考虑值39。需要您的帮助并提前感谢。

第一个表达式从39中减去e.shiftKey,并计算结果是true还是false。该值为非零值,因此在强制转换为布尔值时计算为true。因此,结果是2,因为如果表达式为true,则2是结果。

第二个表达式计算e.shiftKey是true还是false。该值也是非零的,因此也是真的。因此,结果是2,然后从39中减去,剩下37。

你的陈述相当于这些(第一个陈述中的父母是不必要的;为了清楚起见,我只是把它们放进去了):

var k = (39 - e.shiftKey) ? 2 : 0;
var k = 39 - (e.shiftKey ? 2 : 0);

放入if语句,它们看起来像这样:

if (39 - e.shiftKey == true) k = 2;
if (e.shiftKey == true) k = 39 - 2;

所以,正如上面的评论者所说,这是一个运算符优先级的问题。括号总是排在第一位,因为它们用于覆盖优先级。然后是逻辑NOT(!),然后是指数,然后是乘法/除法,然后是加法/减法,然后是&,然后是||,然后是三元运算符。这些只是基础;里面还有不少其他人。看看Jaromanda X联系的医生。