2016-11-04 62 views
2

最近遇到短路評估,並有點困惑,因爲我只在上週進入編程階段。根據我的理解,如果在第一個雙管之前發生了什麼,那麼它將停止,並且不會評估雙管之後的情況。例如:使用三元運算符還是短路評估之間的區別?

實施例1:

​​

所以我假設如果存在,那麼分配否則到b b等於一個對象。 我不明白什麼是我將使用這一點,它的不同之處,以三元運營商,是不是短路的評價一樣:

例2:

var a = true; 
var b = (a) ? a : {}; 

爲什麼會一個使用示例1而不是示例2,因爲寫出來的速度並不慢,或者相對於另一個使用速度更快?或者這只是一個愚蠢的問題,也許我錯過了一些東西。如果有人能爲我清楚這將是偉大的。

+2

當第二個操作數有副作用這隻影響。 – Ergwun

+0

使用你想要的任何一個。你已經花在思考上的時間會比打字或執行上的任何累積差異更大。 – 2016-11-04 00:40:57

+0

有點無關,但作爲一個實驗嘗試做'b = a && {};'看看會發生什麼,並試圖理解爲什麼會發生。 –

回答

2

短路電路運營商可能會影響正確性和性能的幾種方法。

重要的是避免副作用或第二操作數的性能命中。

短路可以當它是安全的唯一評估第二個操作數避免錯誤:

var a = a && someFunctionThatWillThrowIfAIsNull(a); 

可以通過將其第二,如果更快的函數的結果可以使第二個操作數冗餘避免緩慢的功能:

var a = someFastFunction() || someSlowFunction(); 
+0

謝謝,給了我比以前更多的見解。 –

0

下面是不同用法的示例(取決於第一個參數)。檢查他們每個人的控制檯,瞭解他們的工作方式。

console.log("'' || {}:", '' || {}); 
 
console.log("1 || {}:", 1 || {}); 
 
console.log("0 || {}:", 0 || {}); 
 
console.log("true || {}:", true || {}); 
 
console.log("false || {}:", false || {}); 
 
console.log("[] || {}:", [] || {}); 
 

 
console.log(''); 
 

 
console.log("('') ? '' : {}:", ('') ? '' : {}); 
 
console.log("(1) ? 1 : {}:", (1) ? 1 : {}); 
 
console.log("(0) ? 0 : {}:", (0) ? 0 : {}); 
 
console.log("(true) ? true : {}:", (true) ? true : {}); 
 
console.log("(false) ? false : {}:", (false) ? false : {}); 
 
console.log("([]) ? '' : {}:", ([]) ? [] : {}); 
 

 
console.log(''); 
 

 
console.log("'' && {}:", '' && {}); 
 
console.log("1 && {}:", 1 && {}); 
 
console.log("0 && {}:", 0 && {}); 
 
console.log("true && {}:", true && {}); 
 
console.log("false && {}:", false && {}); 
 
console.log("[] && {}:", [] && {});

+0

謝謝你的視覺演示,我想我只是不太明白如何短路工作,但我現在有一個更好的主意,謝謝。 –