2023-04-07 重温JavaScript红宝书-布尔操作符

47 阅读3分钟

布尔值操作符与相等性操作符同样重要,可用于if-else和循环语句。 布尔操作符一共有3个:逻辑非、逻辑或和逻辑与

1、逻辑非

逻辑非由一个叹号(!)表示,始终返回一布尔值,遵循以下规则:

  • 如果操作数是对象,则返回false
  • 如果操作数是空字符串,则返回true
  • 如果操作数是非空字符串,则返回false
  • 如果操作数是数值0,则返回true
  • 如果操作数是非0数值(包括Infinity),则返回false
  • 如果操作数是null,则返回true
  • 如果操作数是NaN,则返回true
  • 如果操作数是undefined,则返回true

验证以上描述:

image.png

注:同时使用两个叹号(!!)相当于调用了转型函数Boolean()。无论操作数是什么类型,第一个叹号总会返回布尔值,第二个叹号对该布尔值进行取反,从而给出真正对应的布尔值

2、逻辑与

当且仅当所有的操作数为true时,一组布尔操作数的逻辑与(&&,逻辑连接)运算结果为true,否则为false

一般来说,当从左到右求值时,该操作符返回第一个假值操作数的值;如果它们都是真值,则返回最后一个操作数的值

逻辑与操作符由两个和号(&&)表示,应用到两个值

逻辑与操作符遵循以下真值表:

image.png

逻辑与操作符可用于任何类型的操作数,不限于布尔值。如果操作数不是布尔值,则返回不一定是布尔值,如下:

  • 如果第一个操作数是对象,则返回第二个操作数
  • 如果第二个操作数是对象,则只有第一个操作数求值为true才会返回该对象
  • 如果两个操作数都是对象,则返回第二个操作数
  • 如果有个操作数是null、NaN、undefined,则返回对应的null、NaN、undefined

逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。如果第一个操作数是false,那么无论第二个操作数是什么值,结果都不可能等于true

3、逻辑或

逻辑或是由两个管道符(||)表示,遵循如下真值表:

image.png

与逻辑与类似,如果有一个操作数不是布尔值,则不一定会返回布尔值,遵循如下规则:

  • 如果第一个操作数是对象,则返回第一个操作数
  • 如果第一个操作数求值是false,则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数都是null、NaN、undefined,则返回对应的null、NaN、undefined

同样逻辑或也有短路特性,当第一个操作数为true时,第二个操作数就不会被求值了