Post

JavaScript逻辑运算符

  1. 逻辑与
1
2
3
4
var a = 1;
var b = 2;

a===1 && b === 2

短路写法,即如果第一个操作数能够决定结果,那么就不会对第二个操作数求值。

  • 前面是一个判断,后面是一个表达式

逻辑与不一定返回布尔值。此时,它遵循以下规则

  • 如果第一个操作数是对象,则返回第二个操作数

/assets/img/8.png

  • 如果第二个操作数是对象,则只有第一个操作数的求值结果为true的情况下才返回该对象

/assets/img/8.png

  • 如果两个操作数都是对象,则返回第二个操作数

/assets/img/8.png

  • 如果第一个操作数是null, 则返回null
  • 如果第一个操作数是NaN, 则返回NaN
  • 如果第一个操作数是undefined,则返回undefined

/assets/img/8.png

  1. 逻辑或
1
2
3
var a = 1
var b = 2
a == 2 || b == 2

逻辑或不一定返回布尔值。此时,它遵循以下规则

  • 如果第一个操作数是对象,则返回第一个操作数
  • 如果第一个操作数的求值结果是false, 则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数都是null, 则返回null
  • 如果两个操作数都是NaN,则返回NaN
  • 如果两个操作数都是undefined,则返回undefined 逻辑或与逻辑与都是短路操作,如果两个写在一起会发生什么呢?
1
2
a && b || c
上面这个相当于三目运算符 a?b:c

那么问题来了

  • 如果逻辑与中,第一个是false,第二个操作数还会计算么 答案是不会计算的。 只有在逻辑非中,如果第一个是false,它会继续计算第二个,如果第一个是true, 后面的不会计算
This post is licensed under CC BY 4.0 by the author.