本文是JavaScript基础教程中的第四章,在这一章中,我们将学习如何使用条件代码为你的代码提供强大的逻辑支撑。
什么是布尔逻辑?
无论你是否认为自己是“逻辑大王”,在现实生活中,你一直在使用逻辑思维! 想想你今天已经做出的所有决定:如果会下雨,就带上雨伞;如果饿了,就干饭。很多决定都取决于某件事是真是假。 饿了么?如果是真的,就去干饭;如果是假的,就先干别的。这就是条件语句。 而当你使用真/假逻辑时,就是在使用所谓的布尔逻辑。
布尔逻辑是一种数学逻辑,它只有两个值:真和假。
在 JavaScript 中,我们用 true
和 false
来表示这两个值。
比较运算符
我们可以用一些运算符来比较两个值或表达式,看它们是否相等、不等、大于、小于等等。
这些运算符会返回一个布尔值,也就是 true
或 false
。例如:
// 等于运算符(==)会检查两边的值是否相等
console.log(3 == 3); // true
console.log(3 == 4); // false
// 不等于运算符(!=)会检查两边的值是否不相等
console.log(3 != 3); // false
console.log(3 != 4); // true
// 大于运算符(>)会检查左边的值是否大于右边的值
console.log(3 > 3); // false
console.log(3 > 4); // false
console.log(3 > 2); // true
// 小于运算符(<)会检查左边的值是否小于右边的值
console.log(3 < 3); // false
console.log(3 < 4); // true
console.log(3 < 2); // false
我们把这些运算符称为比较运算符,因为它们会比较两个值或表达式的大小。 还有一些其他的比较运算符,比如大于等于(>=)、小于等于(<=)、严格等于(===)、严格不等于(!==)等等,你可以自己试试看它们的效果。
严格等于和等于的区别
严格等于(===)和等于(==)的区别在于,严格等于不仅会检查两边的值是否相等,还会检查它们的类型是否相等。二者不同时满足则会返回 false
。例如:
console.log(3 === 3); // true
console.log(3 === "3"); // false
console.log(3 == "3"); // true
也就是说,等于(==)会在比较之前,将两边值转换为相同的类型,然后再比较。
而严格等于(===)不会进行类型转换,所以如果两边值的类型不同,就会直接返回 false
。
除了比较运算符,我们还有逻辑运算符,它也与布尔逻辑有关。
逻辑运算符
逻辑运算符是用来比较两个表达式的结果或布尔值的运算符。
JavaScript 中有三种逻辑运算符:与(&&
),或(||
)和非(!
)。
与运算符(&&)
与运算符(&&
)会返回两个操作数的逻辑与结果,也就是说,只有当两个操作数都为 true
时,才会返回 true
,否则返回 false
。例如:
// 与运算符(&&)会返回两个操作数的逻辑与结果
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
与运算符(&&
)也可以用于非布尔值的操作数,此时会遵循以下规则:
- 如果第一个操作数是真值(即可以转换为
true
的值),则返回第二个操作数的值; - 如果第一个操作数是假值(即可以转换为
false
的值),则返回第一个操作数的值; - 真值包括除了
false
,0
,""
,null
,undefined
, 和NaN
之外的所有值; - 不是真值的值都被认为是假值。
比如在下面的代码中:
// 与运算符(&&)可以用于非布尔值的操作数
console.log(3 && 5); // 5
console.log(0 && 5); // 0
console.log("hello" && "world"); // "world"
console.log("" && "world"); // ""
console.log(null && undefined); // null
或运算符(||)
或运算符(||
)会返回两个操作数的逻辑或结果,也就是说,只有当两个操作数都为 false
时,才会返回 false
,否则返回 true
。例如:
// 或运算符(||)会返回两个操作数的逻辑或结果
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
和与运算符类似,或运算符(||
)也可以用于非布尔值的操作数,规则如下:
- 如果第一个操作数是真值(即可以转换为
true
的值),则返回第一个操作数的值; - 如果第一个操作数是假值(即可以转换为
false
的值),则返回第二个操作数的值; - 真值包括除了
false
,0
,""
,null
,undefined
, 和NaN
之外的所有值; - 不是真值的值都被认为是假值。
让我们看看下面的代码:
// 或运算符(||)可以用于非布尔值的操作数
console.log(3 || 5); // 3
console.log(0 || 5); // 5
console.log("hello" || "world"); // "hello"
console.log("" || "world"); // "world"
console.log(null || undefined); // undefined
非运算符(!)
非运算符(!
)会返回一个操作数的逻辑非结果,也就是说,如果操作数为 true
,则返回 false
;如果操作数为 false
,则返回 true
。例如:
// 非运算符(!)会返回一个操作数的逻辑非结果
console.log(!true); // false
console.log(!false); // true
非运算符(!
)也可以用于非布尔值的操作数,此时会先将操作数转换为布尔值,然后再取反。例如:
// 非运算符(!)可以用于非布尔值的操作数
console.log(!3); // false
console.log(!0); // true
console.log(!"hello"); // false
console.log(!""); // true
console.log(!null); // true
小技巧
根据以上提到的性质不难发现,你可以使用两个非运算符(!!
)来将一个值转换为布尔值。例如:
// 使用两个非运算符(!!)将一个值转换为布尔值
console.log(!!3); // true
console.log(!!0); // false
console.log(!!"hello"); // true
console.log(!!""); // false
console.log(!!null); // false
如何用条件代码来编程?
有了布尔逻辑,自然就知道了如何判断某个条件是否为真或假, 于是我们就可以用条件代码来编程了。
条件代码就是根据不同的情况执行不同的代码块。在 JavaScript 中,我们有以下几种条件语句:
if
语句:当一个条件为真时,执行一段代码。else
语句:当一个条件为假时,执行另一段代码。else if
语句:当第一个条件为假时,检查另一个条件,如果为真,执行对应的代码。switch
语句:根据一个表达式的不同值,执行不同的代码块。
下面我们来看看每种语句的例子。
if 语句
if
语句是最常见的条件语句,它只有当括号里的条件为真时才会执行花括号里的代码块。例如:
// 如果分数大于或等于450分,就打印“及格了”
var score = 608; // 分数
if (score >= 450) {
console.log("及格了");
}
输出结果:
及格了
注意 if
是小写字母,大写字母(If 或 IF)会导致 JavaScript 报错。
保留关键字
if
是 JavaScript 的保留关键字,也就是说,你不能用 if
来命名变量或函数。
同样地,我们前面介绍的 var
、function
、return
等等都是保留关键字,你同样不能用它们来命名变量或函数。
在JavaScript中,所有保留关键字都是小写的。 完整的保留关键字列表可以在 这里 找到。
else 语句
你可以用 else
语句来扩展 if
语句,它会在 if
的条件为假时执行另一段代码块。例如:
// 如果分数大于或等于450分,就打印“及格了”,否则打印“不及格”
var score = 432; // 分数
if (score >= 450) {
console.log("及格了");
} else {
console.log("不及格");
}
输出结果:
不及格
else if 语句
你也可以用 else if
语句来扩展 if
语句,它会在 if
的条件为假时检查另一个条件,如果为真,执行对应的代码块。例如:
// 如果分数大于或等于90分,就打印“优秀”,
// 如果分数大于或等于60分但小于90分,就打印“良好”,
// 否则打印“不及格”
var score = 608; // 分数
if (score >= 650) {
console.log("优秀");
} else if (score >= 450) {
console.log("良好");
} else {
console.log("不及格");
}
输出结果:
良好
你可以用多个 else if
条件语句,但注意只有第一个满足的 else if
的代码块会被执行。
JavaScript 在执行了第一个满足的条件后就会跳过剩下的条件。例如:
// 增加“中等”评级的判别条件
var score = 608; // 分数
if (score >= 650) {
console.log("优秀");
} else if (score >= 550) {
console.log("良好");
} else if (score >= 450) {
console.log("中等");
} else {
console.log("不及格");
}
输出结果:
良好
注意这里即使分数也满足了第三个条件(大于或等于70分),但因为第二个条件已经满足了(大于或等于80分),所以第三个条件被跳过了。
一个 else if
语句不一定要跟着一个 else
语句来工作。如果没有任何一个 if
或 else if
的条件满足,那么 JavaScript 就会继续往下走,并且不会执行任何一个条件代码块。例如:
// 如果分数大于或等于650分,就打印“优秀”,
// 如果分数大于或等于550分但小于650分,就打印“良好”
var score = 432; // 分数
if (score >= 650) {
console.log("优秀");
} else if (score >= 550) {
console.log("良好");
}
输出结果:
没有任何输出!
switch 语句
switch
语句根据一个表达式不同的值,以一种更简洁的方式来执行不同的代码块。它的语法如下:
switch(expression) {
case value1:
// 当 expression 的值与 value1 相同时执行这段代码块
break;
case value2:
// 当 expression 的值与 value2 相同时执行这段代码块
break;
...
default:
// 当 expression 的值与任何一个 case 都不匹配时执行这段代码块
}
switch
语句和 if
语句的区别在于,switch
语句根据表达式的值来选择执行哪个代码块,
而 if
语句是根据一个表达式的真假来选择执行哪个代码块。
实际上,由于 switch
语句使用严格相等运算符(即 ===
)来比较表达式的值和每个 case 的值,所以有时候,
你可以用 switch
语句来代替 if
语句,只要保证表达式的值和 case 的值都是同一种类型的数据。
下面是一个具体的例子:
// 根据今天是星期几打印不同的问候语
var day = "星期三"; // 今天是星期几
switch(day) {
case "星期一":
console.log("新的一周开始了,加油!");
break;
case "星期二":
console.log("周二了,还有四天就周末了!");
break;
case "星期三":
console.log("周三了,一周已经过了一半!");
break;
case "星期四":
console.log("周四了,V50!");
break;
case "星期五":
console.log("周五了,明天就周末啦~");
break;
case "星期六":
console.log("周六了,周末愉快~");
break;
case "星期日":
console.log("周日了,这周要调休!");
break;
default:
console.log("请输入有效的星期几!");
}
输出结果:
周三了,一半的时间过去了!
注意每个 case
后面都有一个 break
语句,它会让 JavaScript 跳出 switch
语句,不再检查其他的 case
。
如果没有 break
语句,JavaScript 会继续执行下一个 case
的代码块,直到遇到一个 break
或者 switch
语句结束。
这可能会导致意想不到的结果。例如:
var day = "星期三"; // 今天是星期几
switch(day) {
case "星期一":
console.log("新的一周开始了,加油!");
case "星期二":
console.log("周二了,还有四天就周末了!");
case "星期三":
console.log("周三了,一周已经过了一半!");
case "星期四":
console.log("周四了,V50!");
case "星期五":
console.log("周五了,明天就周末啦~");
case "星期六":
console.log("周六了,周末愉快~");
case "星期日":
console.log("周日了,这周要调休!");
default:
console.log("请输入有效的星期几!");
}
输出结果:
周三了,一周已经过了一半!
周四了,V50!
周五了,明天就周末啦~
周六了,周末愉快~
周日了,这周要调休!
请输入有效的星期几!
你可以看到,因为没有 break
语句,JavaScript 执行了所有从 case "星期三"
开始的代码块,直到 switch
语句结束。这显然不是我们想要的结果。
最后一个 default
语句是可选的,它会在没有任何一个 case
匹配时执行。你可以用它来处理一些异常或错误的情况。
条件代码在日常生活中的应用
条件代码在日常生活中非常常见且有用。我们经常需要根据不同的情况做出不同的决定:
如果今天是生日,就吃蛋糕。
如果明天要考试,就开夜车。
如果看到红灯,就等待。
这些都是用条件代码来描述的情况。我们可以用 JavaScript 来模拟这些情况,并且让电脑帮我们做出决定:
// 如果今天是生日,就吃蛋糕
var today = "2023年8月10日"; // 今天是什么日期
var birthday = "1919年8月10日"; // 生日是什么日期
if (today == birthday) {
console.log("今天是生日,吃蛋糕吧!");
} else {
console.log("今天不是生日,不能吃蛋糕哦!");
}
输出结果:
今天是生日,吃蛋糕吧!
总结
本章是JavaScript基础教程系列的第四章,介绍了JavaScript的条件代码。
布尔逻辑是一种数学逻辑,只有两个值:真和假。
在JavaScript中,我们用
true
和false
表示布尔值。可以使用比较运算符(如相等、不等、大于、小于等)比较两个值或表达式,并返回布尔值。
条件代码用于根据不同的情况执行不同的代码块,在JavaScript中,条件代码有四种形式:
if
语句、else
语句、else if
语句和switch
语句。if
语句根据条件为真或假执行代码块,else
语句在if
条件为假时执行代码块,else if
语句在if
条件为假时检查另一个条件,并在条件为真时执行代码块,switch
语句根据表达式的不同值执行不同的代码块。每个代码块都以case
开始,break
语句用于在switch
语句中跳出代码块。
希望你能掌握这些知识,并且能够用它们来编写自己的条件代码。在下一章中,我们将学习如何用循环语句来重复执行某些代码。
小试牛刀
比较运算符与逻辑运算符
下面的代码执行后,将会输出什么结果?请先自己思考,然后在控制台中输入代码并执行,看看结果是否和你想的一样。
var age = 18;
var gender = "male";
if (age >= 18 && gender == "male") {
console.log("You are a man.");
} else if (age >= 18 && gender == "female") {
console.log("You are a woman.");
} else {
console.log("You are a child.");
}
很优雅
下面的代码有什么优势?如果不能使用逻辑运算符,你会怎么写?
var name = null;
var greeting = name || "Hello";
console.log(greeting);