小白学前端——&&和||逻辑短路问题
这个&& (且)和||(或)应该也是初学者容易弄混,不是很好理解的地方。下面先来说一下他们各自的解释。
&&(且):&&的意思是假如有a,b两个条件在&&的两边,即a&&b,那么必须a,b条件都满足,这整个条件才成立,否则不成立。
||(或):||的意识是当a||b时,只要满足a或者b,这整个条件就成立,否则不成立。
这个还比较好理解,但是&&和||还有一个问题是什么时候会引发逻辑短路。(我简单的理解就是什么时候不会执行后面的条件,而什么时候又会执行后面的条件)
用下面的例子说明:
首先:
&&是两个条件都满足,那么这整个条件成立,所以如果前面的条件都不满足的话,那证明是一定不会成立了,后面的条件根本没有必要运行了,这个时候会引发逻辑短路。
||是只要其中一个条件满足,那么这整个条件成立,所以如果第一个条件满足了,也就不用去执行后面的条件了,这个时候也会引发逻辑短路。
这道题中,因为这个a没有声明,所以如果执行到这步的时候,肯定是会报错的,错误:a is not defined。
①num=8;
num>5 && console.log(a)
会报错,因为8>5,判断了第一个条件是成立的,之后就会去执行第二个条件,执行到console.log(a);发现a没有声明,就会报错。
②num=8;
num<5 && console.log(a);
不会报错,因为第一个条件8<5就不满足了,那么整个条件肯定是不满足了,这个时候就会引发逻辑短路,也就不会执行到console.log(a);那么也不会报错了。
③num=8;
num>5 || console.log(a);
这个也不会报错,因为8>5的条件已经成立了,在||中只要满足其中一个整个条件就成立,那么也不用执行到后面了,这个也是引发了逻辑短路。
④num=8;
num<5 || console.log(a);
这个会报错,因为8<5显然是不成立的,所过会去执行后面的条件,只要后面的条件成立,那么整个条件就是成立的,运行到console.log(a),因为没有声明a ,所以会报错。
如果有说的不正确的地方,欢迎指正,谢谢!