对于一个使用三元运算符的表达式,我得到了一个奇怪的结果
I am getting a strange result for an expression with ternary operator
当在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联系的医生。
相关文章:
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- Ajax/Php得到一个以上的结果
- 一个javascript实现base64图像编码并将结果写入文本文件
- 乘法返回一个奇怪的结果
- 尝试添加一个选项以使用append进行选择,但没有任何结果
- 如何只输出一个SQL结果
- MeteorJS从上一个函数中检索JS中的结果
- 使用NextToken使用javascript aws-sdk解析下一个结果
- 我有一个字段计算,如果结果低于 60,则需要显示最小值
- 如何等待一个HTML页面并在页面复杂创建时获得结果
- 角度 2:使用一个 http 调用的结果来执行另一个调用
- Meteor:如何遍历一个数组,这是一个异步方法的结果
- json结果显示第一个值
- 做了一个javascript小实验,需要你的帮助才能理解意外的结果
- 访问来自另一个函数的函数结果
- 读取一个本地文件,编码为base64,我想给用户一个将结果保存到文件的选项
- 将函数结果传递给Javascript中的另一个函数变量
- 当我运行代码时,我得到以下结果 []对象对象] [对象对象],但应该给我一个有序数组
- 有没有一个简单的解决方案可以根据3个数据找到结果
- 给每个谷歌距离矩阵结果一个id