60秒完全掌握布尔操作符

295 阅读3分钟

嗨!我是亚当斯,这是我的60秒系列的第二篇

布尔操作符与相等操作符同等重要,ECMAScript的流控制语句离不开布尔操作符号。

布尔操作符一共有3个:逻辑与、逻辑或、逻辑非。在此只讨论前两种。

一、逻辑与

逻辑与操作符用“ && ”,该操作符应用到两个值:true 和 false。对 “ && ”左右两边的“ 第一操作数 ”和“ 第二操作数 ”求值,得到结果如下表:

第一操作数第二操作数结果
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

“ && ”是一种短路操作符,这表示如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。

例如,第一个操作数的结果是false,那么无论第二个操作数的结果是什么,整体的结果只能是false。只有当两个操作数的结果都是true时,整体的结果才是true

例子

// 例子1:
let money = true;
let result = (money && something);
console.log(result);
// 结果-报错:something is not defined
// 原因:对第一个操作数求值,变量money被赋值为ture。继续对第二个操作数求值,变量something未声明,所以逻辑与操作符对其求值时报错

二、逻辑或

逻辑或操作符用“ || ”,该操作符应用到两个值:true 和 false

对 “ || ”左右两边的“ 第一操作数 ”和“ 第二操作数 ”求值,得到结果如下表:

第一操作数第二操作数结果
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

“ || ”也是一种短路操作符,如果第一个操作数的结果是true,那么无论第二个操作数是什么,都不会被求值

例子

// 例子1:
let money3 = true;
let result3 = (money3 || something3);
console.log(result3);
// 结果-true
// 原因:对第一个操作数求值,变量money3被赋值为ture。整个结果为false,程序在此结束,变量something3虽然未声明,但程序未运行至对第二个操作符求值

// 例子2:
let money4 = false;
let result4 = (money4 || something4);
console.log(result4);
// 结果-报错:something4 is not defined
// 原因:对第一个操作数求值,变量money4被赋值为false。继续对第二个操作数求值,变量something3未声明,求值报错

常规应用:避免给某变量赋值null或undefined

let num = val1 || val2;
// 变量val1中存的是首选值,变量val2中存的是备用值
// ---注意:null的boolean值为false
// 判断:
// 如果变量val1不是null(即判断为true),就把其中存的值赋值给num;
// 如果变量val1是null,变量val2中存的值,赋值给num

这种写法在ECMAScript中经常用于变量赋值

进一步,如果使用多个“ || ”,可实现连续判断。例如在if语句中,将连写的多个操作数放入if语句,作为if是否执行的条件(condition)。

例如在Ajax-Day1中的图书管理DEMO中,使用多个“ || ”来判断三个文本框是否填写完整,如果有一个未填写,“条件(condition)”的判断结果就因为true,随后执行return退出if所嵌套的事件函数,并alert弹出提示信息

Snipaste_2021-10-12_18-52-08.png

Snipaste_2021-10-12_18-53-07.png