2016-11-04 75 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

谢谢你的视觉演示,我想我只是不太明白如何短路工作,但我现在有一个更好的主意,谢谢。 –