流程控制语句
所谓流程控制,主要就是用于控制整个程序的走向的。默认情况下,程序是从上往下,逐条执行,这种情况我们将其称之为顺序结构。但是并不是所有的程序都是使用顺序结构就能够完成的。在我们书写程序时往往还需要对整个程序进行分支,或者对某一段代码进行重复执行。
所以,在这一章我们就一起来看一下 JavaScript 中的流程控制语句。
本章中我们将学习如下的内容:
- 条件语句
- 循环语句
条件语句
条件语句,主要就是给定一个判断条件,并在程序执行过程中判断该条件是否成立,然后根据判断结果来执行不同的操作,从而改变代码的执行顺序,实现更多的功能。
一般来讲,条件语句可以分为 3 种:单分支语句,双分支语句以及多分支语句,我们一个一个来看。
单分支语句
单分支语句,由一个if
组成,如果条件成立,则进入代码块开始执行语句,单分支语句的语法如下:
if(条件){
// 条件为真时执行的代码
}
示例:
let age = 20;
if(age >= 18){
console.log("你已经是成年人了");
}
如果条件不是一个布尔值,那么会被自动转换为布尔值
if(1){
console.log("Hello");
}
if 语句里面的花括弧不是必须的,当只有一条执行语句的时候,可以不使用花括弧,但是不推荐这么做
if(true)console.log("Hello");
双分支语句
顾名思义,就是有两个分支线,如果 if 条件不成立,那么就会跳入到 else 语句里面,语法如下:
if(条件){
// 条件为真时要执行的代码
}else{
// 条件为假时要执行的代码
}
示例:
let age = 16;
if(age >= 18){
console.log("你已经成年了");
}else{
console.log("你还是未成年");
}
三目运算符
if...else
语句的一个缩写方式,就是使用三目运算符?:
语法:条件 ? (条件为真时执行的代码) : (条件为假时执行的代码)
示例:
let age = 16;
let result = age>=18 ? "你已经成年了" : "你还是未成年";
console.log(result); // 你还是未成年
练习:使用三目运算符来找出3个数中最大的那个数
let a = 3,b = 8,c = 5;
let max = a>b ? (a>c?a:c) : (b>c?b:c);
console.log(max); // 8
多分支语句
多个if...else
语句可以组合在一起,形成逻辑决策树:
if(条件){
// 执行语句
}else if(条件){
// 执行语句
}else{
// 执行语句
}
需要注意的就是在多分支语句里面,如果进入到了某一个语句块,那么后面的条件就不会再进行判断,而是会直接跳出,多分支语句示例如下:
const readline = require("readline-sync");
console.log("请输入你的成绩:");
let score = readline.question("");
if(score > 100 || score < 0){
console.log("成绩输入有误");
}else if(score >= 90){
console.log("优秀");
}else if(score >= 70){
console.log("良好");
}else if(score >= 60){
console.log("合格");
}else{
console.log("不合格");
}
switch 语句
有一种比多分支语句结构更加清晰的语句结构,就是 switch 语句。语法如下:
switch(条件){
case 1:
// 执行语句;
break;
case 2:
// 执行语句;
break;
case 3:
// 执行语句;
break;
default:
// 执行语句;
}
示例:
let num = 2;
switch(num){
case 1:
console.log("the number is one");
break;
case 2:
console.log("the number is two");
break;
default:
console.log("neither one nor two");
}
// the number is two
这里特别需要说明的是,switch 语句中的条件和分支入口进行的是全等比较,示例如下:
let i = "2";
switch (i) {
case 2:
console.log('this is one');
break;
case "2":
console.log('this is two');
break;
default:
console.log('this is default');
}
// 打印结果为:this is two
还有一点,在 JavaScript 里面的 switch 语句中,和其他静态语言有所不同的是,case 后面的值不一定必须是常量,可以是变量甚至是表达式,只要 switch 的条件和 case 入口匹配上即可,如下:
switch(false){
case 2 < 3:
console.log("进入了第一个入口");
break;
case 6 < 3:
console.log("进入了第二个入口");
break;
default:
console.log("进入了默认入口");
}
// 进入了第二个入口
break关键字
break
用于跳出某一个 case,如果不书写 break 的话,进入 case 以后会继续进入后面的case语句。break 往往存在一个误区,就是觉得这个关键字是必须要写的,但是并不是必须要写。有些时候我们故意不写break 关键字反而能给我们带来便利,例如下面的例子:
let day = 4;
switch(day){
case 1:
case 2:
case 3:
case 4:
case 5:
console.log("今天是工作日");
break;
case 6:
case 7:
console.log("今天是周末");
break;
default:
console.log("输入有误");
}
这里我们希望程序在变量 day 值为 1 - 5 时输出"今天是工作日",在值为 6 和 7 的时候输出"今天是周末"。这个时候就可以通过省略break
关键字来节省我们的代码量。
default关键字
default
用于书写默认的条件,如果前面都不满足的话,就进入到 default 语句里面。
default 往往也会存在误区,很多人认为 default 也是必须要写的。事实上 default 也是可以省略的,我们书写 default ,只是为了对 switch 没有进入 case 语句时的情况做一种默认操作。当然,作为良好的编码习惯,应该在每一个 switch 语句里面书写上 default。