Skip to main content

JavaScript基础:条件代码

· 约20分钟
Proca

本文是JavaScript基础教程中的第四章,在这一章中,我们将学习如何使用条件代码为你的代码提供强大的逻辑支撑。

什么是布尔逻辑?

无论你是否认为自己是“逻辑大王”,在现实生活中,你一直在使用逻辑思维! 想想你今天已经做出的所有决定:如果会下雨,就带上雨伞;如果饿了,就干饭。很多决定都取决于某件事是真是假。 饿了么?如果是真的,就去干饭;如果是假的,就先干别的。这就是条件语句。 而当你使用真/假逻辑时,就是在使用所谓的布尔逻辑

布尔逻辑是一种数学逻辑,它只有两个值:。 在 JavaScript 中,我们用 truefalse 来表示这两个值。

比较运算符

我们可以用一些运算符来比较两个值或表达式,看它们是否相等、不等、大于、小于等等。 这些运算符会返回一个布尔值,也就是 truefalse。例如:

// 等于运算符(==)会检查两边的值是否相等
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

与运算符(&&)也可以用于非布尔值的操作数,此时会遵循以下规则:

  1. 如果第一个操作数是真值(即可以转换为 true 的值),则返回第二个操作数的值;
  2. 如果第一个操作数是假值(即可以转换为 false 的值),则返回第一个操作数的值;
  3. 真值包括除了 false, 0, "", null, undefined, 和 NaN 之外的所有值;
  4. 不是真值的值都被认为是假值。

比如在下面的代码中:

// 与运算符(&&)可以用于非布尔值的操作数
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

和与运算符类似,或运算符(||)也可以用于非布尔值的操作数,规则如下:

  1. 如果第一个操作数是真值(即可以转换为 true 的值),则返回第一个操作数的值;
  2. 如果第一个操作数是假值(即可以转换为 false 的值),则返回第二个操作数的值;
  3. 真值包括除了 false, 0, "", null, undefined, 和 NaN 之外的所有值;
  4. 不是真值的值都被认为是假值。

让我们看看下面的代码:

// 或运算符(||)可以用于非布尔值的操作数
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 来命名变量或函数。 同样地,我们前面介绍的 varfunctionreturn 等等都是保留关键字,你同样不能用它们来命名变量或函数。

在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 语句来工作。如果没有任何一个 ifelse 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的条件代码。

  1. 布尔逻辑是一种数学逻辑,只有两个值:真和假。

  2. 在JavaScript中,我们用 truefalse表示布尔值。

  3. 可以使用比较运算符(如相等、不等、大于、小于等)比较两个值或表达式,并返回布尔值。

  4. 条件代码用于根据不同的情况执行不同的代码块,在JavaScript中,条件代码有四种形式:if语句、else语句、else if语句和switch语句。

  5. 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);
支持一下

暂无评论,来留下友好的评论吧