&&,||,!学习笔记

163 阅读2分钟

什么是短路运算

短路运算符一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。

0&&1, 1&&0, 1&&2 会分别返回什么值

  1. 若第一个表达式为false,就不会去处理第二个表达式,则返回第一个表达式。
  2. 若第一个表达式为true,继续执行第二个表达式,则返回第二个表达式。(第二个表达式为true或false,都不影响)
console.log(0&&1) //0
console.log(1&&0) //0
console.log(1&&2) //2

0||1, 1||0, 1||2 会分别返回什么值

  1. 若第一个表达式为false,继续执行第二个表达式,则返回第二个表达式。
  2. 若第一个表达式为true,就不会去处理第二个表达式,则返回第一个表达式。
console.log(0||1) //1
console.log(1||0) //1
console.log(1||2) //1

关于&&,||,!,()的优先级问题

  • ()的优先级>!的优先级>&&的优先级>||的优先级
let a = 3||1&&2
console.log(a) //3
  • 因为&&的优先级高于||,所以先运算1&&2,再运算3||2,则输出3
let a = 1||!2&&3
console.log(a) //1
  • 因为!的优先级高于&&,||,所以先运算!2,!2为false,再运算false&&3,再运算1||false,则输出1。
let b = !1||!2&&3
console.log(b) //false
  • 因为!的优先级高于&&,||,所以先运算!1和!2,!1和!2为false,再运算false&&3,再运算false||false,则输出false。
let c = !(1||!2)&&3
console.log(c) //false
  • 因为()的优先级高于&&,||,!,所以先运算1||!2,输出1,再运算!1,输出false,再运算false&&3,则输出false。