&& || 与或的短路运算

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,后面的表达式都不会执行。
例子:
  1. ||
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
  1. &&
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

短路运算有什么用?

  1. 可以精简代码,但同时带来的是代码可读性的降低。
  1. 把能快速确定整个表达式结果的表达式放在前面,由于短路运算后面的表达式可能不会被执行到,节省处理器的运算时间。
 

© LewisWong 2021 - 2025