【问题标题】:Short circuit evaluation In javascriptjavascript中的短路评估
【发布时间】:2015-05-01 18:02:43
【问题描述】:

我需要在我的代码中实现短路评估逻辑。我阅读了一些文章http://en.wikipedia.org/wiki/Short-circuit_evaluationhttp://www.grauw.nl/blog/entry/510 来了解它。但他们没有详细介绍,我尝试了一些例子。

例如:

function a() {return true;}

function b() {return false;}

function c() {return true;}

表达式

案例一)a() && b() && c();

案例2)a() || b() && c();

案例3)a() && c() || b();

案例一:

c() 不会被执行。

案例 2:

b()c() 不会被执行

案例 3:

b() 不会被执行。

我们应该从哪里了解这种短路评估?

【问题讨论】:

  • 如果下面的答案回答了您的问题,Stack Overflow 的工作方式,您可以通过单击旁边的复选标记“接受”该答案; details here。但前提是您的问题得到了回答;如果没有,请考虑为问题添加更多详细信息,或者如果您自己回答的方式与现有答案明显不同,则发布您自己的答案并接受它是完全可以的(所以会让您等待两天接受它) .
  • 您好,请看我关于短路的小博客,希望对您有所帮助:js-guru.blogspot.com/2015/08/javascript-short-circuiting.html

标签: javascript optimization functional-programming expression conditional-statements


【解决方案1】:

我们应该从哪里了解这种短路评估?

The specification 很方便,MDN 也很方便。

但简短的版本是:

  • 始终评估 &&|| 的左侧操作数,从而为我们提供左侧值

  • 对于&&,如果左侧值为假,则不计算右侧操作数;表达式的值是左边的值。

  • 使用||,如果左侧值为真,则不计算右侧操作数;表达式的值是左边的值。

  • 否则,计算右侧操作数,表达式的结果就是它的值。

“Falsey”值是在用作布尔值时强制转换为false 的任何值。这些是0""NaNundefinednull,当然还有false

“真实”值是任何非虚假的值。

更多关于我的博客:JavaScript's Curiously-Powerful OR Operator (||)(我一直想做&& 的那个版本……)

【讨论】:

  • @t-j-crowder:感谢您提供的信息。知道为什么总是评估左侧操作数吗?比如说,您可以拥有call() || true,并且您知道结果将是正确的,那么为什么还要打电话呢?基本上,我只是担心我可以依靠这个。
  • @rjcarr:总是计算左侧操作数,因为这就是运算符的定义方式。这个定义是有道理的:你必须从某个地方开始(记住,在你评估它之前,你不知道你的例子中的truetrue),并且在我们的数学中,大多数操作都是从左到右进行的。是的,您绝对可以知道call() || true 将调用call,然后返回其结果(如果它是真的)或true(如果call 的结果是假的)。
猜你喜欢
  • 2015-05-11
  • 2021-09-23
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
相关资源
最近更新 更多