当前位置: 首页 > 知识库问答 >
问题:

为什么短路评估在操作员优先级说不应该的情况下起作用?

林承悦
2023-03-14

在JavaScript和Java中,equals运算符(=====)的优先级高于or运算符()。但这两种语言(JS、Java)都支持if语句中的短路:

现在,根据操作员的优先级,不应该发生短路,就优先级而言,====>。(换句话说,应该首先进行比较,为此应该调用getValue(),因为相等检查的优先级高于OR比较。)但确实如此。未调用getValue()(这可以通过将output语句放入其正文中进行检查)。

为什么(当操作员优先级说它不应该时短路起作用)?
还是我把事情搞糊涂了?


共有1个答案

常源
2023-03-14

还是我把事情弄糊涂了?

你是。我认为将优先考虑为分组比排序要简单得多。它影响评估的顺序,但这只是因为它改变了分组。

我不是很清楚Javascript,但在Java中,操作数总是按从左到右的顺序求值。==具有更高的优先级这一事实仅仅意味着

true || foo == getValue()
true || (foo == getValue())
(true || foo) == getValue()
A + B * C
  • 计算A值(并在以后记住它)
  • 求值B
  • 计算C
  • 将计算BC
  • 的结果相乘
  • 将计算A的结果与乘法的结果相加

请注意,尽管*的优先级高于+,但A的计算仍然在BC之前。如果您想从顺序的角度考虑优先级,请注意乘法仍然发生在加法之前,但它仍然满足从左到右的求值顺序。

 类似资料:
  • 我知道C中的逻辑运算符遵循短路,但我怀疑的是短路和运算符优先规则并不是相互对立的。参见下面的示例: 根据优先级规则,最高优先级为前缀运算符的优先级。因此,应首先计算,然后计算,最后将结果分配给。因此预期输出应为。但在本例中,的第二个操作数从未实际执行,结果是。 为什么这里没有应用优先规则。逻辑运算符是否不受优先规则约束?如果有,还有哪些运营商表现出这样的行为?而这种行为背后的逻辑是什么?

  • 我理解下面的区别(至少对于Java): 但我的问题是,当你在处理布尔表达式时,有没有理由使用非短路运算符?是否有一些性能上的好处或使用不会被认为是坏的练习?

  • 我有一个h2作为唯一的项目在一个容器div。我在容器上使用position:relative和h2上使用position:absolute/bottom:0使它与容器底部对齐。但是,我无法使h2文本与容器div的右侧对齐。 HTML: CSS: 链接:http://www.distributionaccess.com/new/stempath/about.html 我在h2上尝试了display:

  • 问题内容: 我正在尝试测试2个线程,一个线程具有较高的优先级,而另一个线程具有较低的优先级。 根据我的结果,有时低优先级线程速度更快,这怎么可能?我已经通过增加每个线程内的click变量来测试了不同优先级的线程。我也增加和减少了睡眠时间,但是什么也没有。 由于我是在没有后台运行繁重程序的情况下进行测试的,因此我决定在运行高清影片的情况下进行测试,但仍然没有真正的变化,线程的速度始终相同。 我的电脑

  • 输入是:1。硬币中一定数量货币的总重量,2。旧货币硬币的价值和相应重量。 目标是找到给定金额货币的最低可能货币价值。 我的方法是按货币的价值/重量比升序对硬币进行排序,然后贪婪地将第一枚硬币的重量尽可能多地匹配到总和中(跟踪它匹配的次数),然后匹配将第二枚硬币的重量尽可能多次地放入余数中,等等,对于所有硬币或直到余数为零(如果不是,情况是不可能的)。 法官说我的答案是错误的。你能给我一个关于算法错

  • 问题内容: 我正在使用nodejs和expressjs框架从服务器下载文件’jsonFile.json’。 我正在使用以下代码 但这会导致对整个文件内容的响应。 我期望浏览器要我将文件保存在本地磁盘中。 如何将文件保存在本地磁盘中? 问题答案: 让Express设置正确的标头,然后执行以下操作: (doc) 编辑: 由于您是通过AJAX调用进行请求的,因此您必须更改设置,因为大多数(全部?)浏览器