我在下面的表达式中得到一个奇怪的值,而我在keyUp事件中按下shift键时尝试更改k代码。
var k = 39 - (e.shiftKey)? 2:0; 结果:2
但是,当它用括号括起来时,它工作正常
var k = 39 - ((e.shiftKey)?2:0); 结果:37
请告知,这是什么原因,为什么第一个表达式根本不考虑值39.需要你的帮助,并提前致谢。
答案 0 :(得分:0)
您的第一个表达式从39中减去e.shiftKey并计算结果是true还是false。该值为非零值,因此在转换为布尔值时求值为true
。因此,结果为2,因为如果表达式为真,则结果为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链接的文档。