&& || 与或的短路运算
date
Apr 24, 2022
slug
8
status
Published
tags
Learn
summary
短路运算
type
Post
Book
什么是&&和||的短路运算?
&&和||是逻辑运算符。其运算规则是这样的:- 表达式1
||表达式2:只要有任意一个表达式为true,则整个表达式为true;反之全部表达式为false,整个表达式才为false。 - 表达式1
&&表达式2:当且仅当全部表达式为true时,整个表达式才为true;反之只要有一个为false,则整个表达式为false。
&&和||的短路运算:如果在前面的运算过程中可以确定整个表达式的结果时,后面的表达式就不会被执行。简单来说:- 如果使用
||逻辑运算符,遇到表达式为true,后面的表达式都不会执行; - 如果使用
&&逻辑运算符,遇到表达式为false,后面的表达式都不会执行。
例子:
||
let a=1, b=2, c=3;
console.log('before expression:'+'a:'+a,'b:'+b,'c:'+c);
(a<0) || (b+=1) || (c+=1)
console.log('after expression:'+'a:'+a,'b:'+b,'c:'+c);分析:由于表达式1
(a<0)为false,根据||的短路运算需要找到值为true的表达式才会停下来,所以会跳到表达式2(b+=1),(b+=1)赋值表达式返回的都是true,所以在表达式2上短路,表达式3(c+=1)不会执行。输出的结果如下:before expression:a:1 b:2 c:3
after expression:a:1 b:3 c:3&&
let a=1, b=2, c=3;
console.log('before expression: '+'a:'+a,'b:'+b,'c:'+c);
(a+=1) && (b<1) && (c+=1)
console.log('after expression: '+'a:'+a,'b:'+b,'c:'+c);分析:根据
&&的短路运算需要找到值为false的表达式才会停下来。所以表达式1(a+=1)为true,执行后跳到表达式2(b<1)为false,停下来,表达式3(c+=1)没有执行。输出的结果如下:before expression: a:1 b:2 c:3
after expression: a:2 b:2 c:3短路运算有什么用?
- 可以精简代码,但同时带来的是代码可读性的降低。
- 把能快速确定整个表达式结果的表达式放在前面,由于短路运算后面的表达式可能不会被执行到,节省处理器的运算时间。