前言
与逻辑、或逻辑在任何编程语言,以及计算机相关的学科中都是基础中的基础,常常自然而然地运用在各种流程控制中
但稍稍利用其判断机制,能够一定程度上简化我们的程序代码,避免因过多的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)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。