bil*_*red 5 javascript ternary-operator short-circuiting
最近遇到了短路评估,并且对此感到有点困惑,因为我上周才开始编程。据我了解,如果第一个双管之前发生的事情是真的,那么它将停止并且不评估双管之后发生的事情。例如:
示例1:
var a = true;
var b = a || {};
Run Code Online (Sandbox Code Playgroud)
所以我假设如果 a 存在,则将 a 分配给 b 否则 b 等于一个对象。我不明白的是我将在哪里使用它以及它与三元运算符有何不同,短路评估是否与以下相同:
示例2:
var a = true;
var b = (a) ? a : {};
Run Code Online (Sandbox Code Playgroud)
为什么要使用示例 1 而不是示例 2,因为它的写出速度并没有变慢,或者使用其中一种比另一种有速度优势吗?或者这只是一个愚蠢的问题,也许我错过了一些东西。如果有人能为我解决这个问题那就太好了。
您的两个示例都将导致被分配( )b的值,并且两个构造都避免对最终操作数(在每种情况下)的求值。atrue{}
但在可读性和评价上存在差异。
可读性:
我认为这if (a || b) { ... }比 ) 更具可读性if (a ? a : b) { ... }。
操作数评估:
在 中(a || b),a仅评估一次。在 中(a ? a : b),a被评估两次。当您使用函数或其他表达式而不是简单变量时,这一点变得很重要:
// Costly double evaluation
var a = someExpensiveFunction()
? someExpensiveFunction()
: {};
// Less costly single evaluation
var a = someExpensiveFunction() || {};
Run Code Online (Sandbox Code Playgroud)
更一般地说,短路运算符可以帮助您:
var a = a && someFunctionThatWillThrowIfAIsNull(a);
Run Code Online (Sandbox Code Playgroud)
// Slower
var a = someSlowFunction() || someFastFunction();
// Faster
var a = someFastFunction() || someSlowFunction();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4773 次 |
| 最近记录: |