炼气五重天
第五节:流程控制
【教学目标】
- 掌握
if-else条件判断的语法及多分支场景应用 - 理解
switch-case语句的适用场景及与if-else的区别 - 熟练使用
for、while等循环结构处理重复操作 - 能通过
break和continue控制循环流程,解决实际问题
【本节重点】
- 条件判断:
if-else的嵌套使用与switch-case的穿透问题 - 循环结构:
for循环的计数器控制、for...of的数组遍历 - 循环控制:
break(终止循环)与continue(跳过当前轮次)的区别 - 场景选择:不同流程控制语句的适用场景对比
一、条件判断:让程序"做选择"
条件判断语句能让程序根据不同情况执行不同代码,就像生活中"如果下雨就带伞,否则不带"的决策过程。
1.1 单分支:if 语句
当满足条件时执行代码,不满足则跳过:
typescript
let score = 85;
// 条件为true时执行大括号内的代码
if (score >= 60) {
console.log("考试及格"); // 会执行(85 >= 60为true)
}
1.2 双分支:if-else 语句
满足条件执行一段代码,不满足执行另一段代码:
typescript
let age = 17;
if (age >= 18) {
console.log("已成年,可独立购票");
} else {
console.log("未成年,需成人陪同"); // 会执行(17 < 18)
}
1.3 多分支:if-else if-else 语句
处理多个条件判断,从上到下依次检查,满足第一个条件后不再执行后续判断:
typescript
let grade = 88;
if (grade >= 90) {
console.log("优秀");
} else if (grade >= 80) {
console.log("良好"); // 会执行(88 >= 80且不满足上一个条件)
} else if (grade >= 60) {
console.log("及格");
} else {
console.log("不及格"); // 所有条件都不满足时执行
}
注意 :条件判断有顺序性,范围大的条件放后面,否则会被前面的条件拦截:
typescript
// 错误示例:条件顺序错误
let score = 85;
if (score >= 60) {
console.log("及格"); // 会先执行这里,后面的条件不再检查
} else if (score >= 80) {
console.log("良好"); // 永远不会执行
}
1.4 嵌套条件:if 内部再放 if
处理更复杂的多层判断,例如"先判断是否及格,再判断是否优秀":
typescript
let score = 95;
if (score >= 60) {
console.log("及格");
// 嵌套判断:及格的前提下是否优秀
if (score >= 90) {
console.log("且达到优秀水平"); // 会执行
}
} else {
console.log("不及格");
}
二、switch-case 语句:固定值匹配
当判断条件是固定值 (如枚举、状态码)时,switch-case 比 if-else 更简洁。
2.1 基本语法
typescript
let day = 3;
switch (day) {
case 1: // 当day等于1时
console.log("星期一");
break; // 跳出switch,防止穿透
case 2:
console.log("星期二");
break;
case 3:
console.log("星期三"); // 会执行
break;
default: // 所有case都不匹配时执行(类似else)
console.log("未知星期");
}
2.2 关键注意点:break 防止穿透
如果忘记写 break,会从匹配的 case 开始,继续执行后续所有 case 代码(称为"穿透"):
typescript
let num = 2;
switch (num) {
case 1:
console.log("一");
case 2:
console.log("二"); // 执行
case 3:
console.log("三"); // 会继续执行(因为case 2没写break)
default:
console.log("结束"); // 继续执行
}
// 输出结果:二 → 三 → 结束
适用场景 :switch-case 适合判断离散的固定值 (如星期、月份、状态码),而 if-else 适合范围判断(如分数区间、年龄范围)。
三、循环结构:让程序"重复做"
循环语句用于重复执行一段代码,避免重复编写相同逻辑(如计算1到100的和)。
3.1 for 循环:固定次数的循环
适合已知循环次数的场景,语法:for (初始化; 条件; 更新)
typescript
// 计算1到10的和
let sum = 0;
for (let i = 1; i <= 10; i++) { // i从1开始,每次加1,直到i>10停止
sum = sum + i; // 累加i的值
}
console.log(sum); // 55(1+2+...+10的结果)
三部分作用:
- 初始化:
let i = 1→ 循环前执行一次(初始化计数器) - 条件:
i <= 10→ 每次循环前检查,true则继续,false则停止 - 更新:
i++→ 每次循环后执行(更新计数器)
3.2 for...of 循环:遍历数组元素
简化数组遍历,直接获取每个元素的值(无需通过索引访问):
typescript
let fruits = ["苹果", "香蕉", "橙子"];
// 遍历数组,依次取出每个元素赋值给fruit
for (let fruit of fruits) {
console.log(fruit); // 依次输出:苹果、香蕉、橙子
}
3.3 while 循环:条件满足就循环
适合循环次数不确定,只知道终止条件的场景:
typescript
// 计算1开始累加,直到和大于100
let total = 0;
let num = 1;
while (total <= 100) { // 只要total<=100就继续循环
total += num;
num++;
}
console.log(total); // 105(1+2+...+14=105)
3.4 do-while 循环:至少执行一次
与 while 的区别:先执行一次循环体,再检查条件(保证至少执行一次):
typescript
let input;
do {
input = prompt("请输入密码(至少6位)"); // 弹出输入框
} while (input.length < 6); // 输入长度不足6位则重新输入
console.log("密码设置成功");
四、循环控制:break 与 continue
在循环中控制流程,避免不必要的循环执行。
4.1 break:立即终止循环
当满足条件时,直接跳出整个循环(后续循环不再执行):
typescript
// 查找数组中第一个偶数
let numbers = [3, 5, 4, 7, 8];
for (let num of numbers) {
if (num % 2 === 0) {
console.log("找到偶数:", num); // 输出4
break; // 找到后立即终止循环
}
}
// 后续的7、8不会被检查
4.2 continue:跳过当前轮次
跳过当前循环中剩余的代码,直接进入下一轮循环:
typescript
// 计算1到10中所有奇数的和
let sumOdd = 0;
for (let i = 1; i <= 10; i++) {
if (i % 2 === 0) {
continue; // 是偶数则跳过当前轮次
}
sumOdd += i; // 只累加奇数
}
console.log(sumOdd); // 25(1+3+5+7+9)
【课堂小结】
- 条件判断:
if-else适合范围判断,多分支用if-else if-elseswitch-case适合固定值匹配,需用break防止穿透
- 循环结构:
for适合已知次数的循环(计数器控制)for...of简化数组遍历(直接获取元素)while/do-while适合条件驱动的循环(次数不确定)
- 循环控制:
break终止整个循环,continue跳过当前轮次
【课后练习】
- 操作题:用
if-else判断一个年份是否为闰年(能被4整除且不能被100整除,或能被400整除) - 操作题:用
for循环计算1到100中所有能被3整除的数字之和 - 操作题:用
switch-case实现"输入月份,输出季节"(3-5月春季,6-8月夏季等) - 思考题:如何用
while循环实现"打印1到100中所有偶数,遇到50时停止"?
【下节预告】
第六节将学习函数的定义与使用,包括函数的参数、返回值、箭头函数等特性,掌握如何通过函数封装代码,提高复用性和可读性。