前言

与逻辑、或逻辑在任何编程语言,以及计算机相关的学科中都是基础中的基础,常常自然而然地运用在各种流程控制中

但稍稍利用其判断机制,能够一定程度上简化我们的程序代码,避免因过多的if else语句使程序显得臃肿

注:本文以javascript为讨论对象

机制

与、非运算符均为二元运算符,需要具有左右两个操作数

与逻辑:a&b 、c&&d
两者的区别为,第一个表达式在运算完a后,无论结果如何都会运算b;
第二个表达式在运算c后会对c进行判断,如果c为假值,则d不再进行运算,可以通俗地将这种现象称为“短路”

//四个函数均会运行:
a()&b()&c()&d()
//仅当左侧的函数返回假值时右侧函数才会执行:
a()&&b()&&c()&&d()

或逻辑:a|b 、c||d

//四个函数均会运行:
a()|b()|c()|d()
//仅当左侧的函数返回真值时右侧函数才会执行:
a()||b()||c()||d()

应用

属性默认值

当object未被计算完成或暂未获取完毕,可以设置默认显示的文本

// title为null、undefined、''、0时均会显示暂无标题
object.title||'暂无标题'

属性访问中的应用

当我们需要根据条件进行数据库查询,然后返回查询结果的一个属性时,可能需要对查询结果进行判空,否则会触发异常:Can not read property 'key' of null

let result = query()
if(result != null)
  return result.key
else
  return null

而利用||的机制则可简化为:当查询结果为空时,转换为对空对象{}的属性访问,会返回符合逻辑的假值undefined,

return (query()||{}).key

也可以利用&&换一个方式:若result为空,阻断对其属性的访问

let result = query()
return (result&&result.key)||null

设置优先级

如操作系统中各进程进行资源争夺,选出其中优先级最高的进程,利用或逻辑则体现为越靠左的进程优先级最高

a()||b()||c()||d()

与逻辑略有不同,适用于右侧的进程需要在左侧进程满足的条件下再进行的场景,并返回当前满足条件的最右侧进程

a()&&b()&&c()&&d()

避免除零异常

当b不存在时,括号表达式的值为Infinity,整个表达式的值为0而不是Infinity,因而可以避免许多场景中的反常现象

a/(b||Infinity)

Plastic
57 声望1 粉丝