对于带有三元运算符

时间:2016-08-01 08:37:54

标签: javascript

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

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

但是,当它用括号括起来时,它工作正常

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

请告知,这是什么原因,为什么第一个表达式根本不考虑值39.需要你的帮助,并提前致谢。

1 个答案:

答案 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链接的文档。