5 第3章:控制流
5.1 🎯 学习目标
- 掌握条件语句(if/else、switch)的使用
- 理解各种循环语句(for、while、do-while)的区别
- 熟练使用break和continue控制循环
- 掌握for…of和for…in遍历数组与对象
5.2 3.1 条件语句
5.2.1 🔀 if 语句
if 语句用于根据条件执行不同的代码块。
let score: number = 85
// 基本 if 语句
if (score >= 60) {
console.log('恭喜你,及格了!')
}
// if...else 语句
if (score >= 60) {
console.log('及格')
} else {
console.log('不及格')
}
// if...else if...else 语句
if (score >= 90) {
console.log('优秀')
} else if (score >= 80) {
console.log('良好')
} else if (score >= 60) {
console.log('及格')
} else {
console.log('不及格')
}最佳实践:
在ArkTS/TypeScript中,条件表达式的返回值会被自动转换为布尔值: - false、0、''、null、undefined、NaN 转为 false - 其他值转为 true
5.2.2 🎚️ 三元运算符(简化条件)
let age: number = 20
let status: string = age >= 18 ? '成年' : '未成年'
// 等价于:
let status2: string
if (age >= 18) {
status2 = '成年'
} else {
status2 = '未成年'
}5.2.3 🔀 switch 语句
当有多个条件分支时,switch 语句比 if...else if 更清晰:
let day: number = 3
let dayName: string
switch (day) {
case 1:
dayName = '星期一'
break
case 2:
dayName = '星期二'
break
case 3:
dayName = '星期三'
break
case 4:
dayName = '星期四'
break
case 5:
dayName = '星期五'
break
default:
dayName = '周末'
}
console.log(dayName) // 输出:星期三注意:
switch 语句中的 break 非常重要!如果没有 break,程序会继续执行下一个 case(称为”穿透”),这通常不是我们想要的结果。
🎮 互动演示:成绩等级判定
输入一个分数(0-100),系统会自动判定等级:
📊 等级标准:
90-100 优秀
80-89 良好
70-79 中等
60-69 及格
<60 不及格
5.3 3.2 循环语句
循环语句用于重复执行一段代码。
5.3.1 🔄 for 循环
for 循环是最常用的循环语句,适合已知循环次数的场景。
// 基本 for 循环
for (let i = 0; i < 5; i++) {
console.log('当前 i = ' + i)
}
// 计算 1 到 100 的和
let sum: number = 0
for (let i = 1; i <= 100; i++) {
sum += i
}
console.log('1到100的和:' + sum) // 5050
// 倒序循环
for (let i = 10; i >= 1; i--) {
console.log(i) // 10, 9, 8, ..., 1
}5.3.2 🔁 while 循环
while 循环适合未知循环次数,只知道循环条件的场景。
// 基本 while 循环
let i: number = 1
while (i <= 5) {
console.log('i = ' + i)
i++
}
// 猜数字游戏(模拟)
let target: number = 42
let guess: number = 30
while (guess !== target) {
if (guess < target) {
console.log('猜小了!')
guess += 5
} else {
console.log('猜大了!')
guess -= 5
}
}
console.log('猜对了!答案是 ' + target)5.3.3 🔁 do…while 循环
do...while 循环至少执行一次,然后再判断条件。
let i: number = 1
do {
console.log('i = ' + i)
i++
} while (i <= 5)
// 即使条件一开始就不满足,do...while 也会执行一次
let j: number = 10
do {
console.log('这条消息会显示,因为 do...while 至少执行一次')
j++
} while (j < 5)5.3.4 📊 三种循环对比
| 循环类型 | 适用场景 | 特点 |
|---|---|---|
for |
已知循环次数 | 结构清晰,初始化、条件、迭代在一起 |
while |
未知循环次数 | 先判断条件,再执行循环体 |
do...while |
至少执行一次 | 先执行一次,再判断条件 |
5.4 3.3 循环控制:break 与 continue
5.4.1 🛑 break 语句
break 用于立即退出整个循环。
// 找到第一个能被 7 整除的数
for (let i = 1; i <= 100; i++) {
if (i % 7 === 0) {
console.log('找到第一个能被7整除的数:' + i)
break // 找到后就退出循环
}
}
// 输出:找到第一个能被7整除的数:75.4.2 ⏭️ continue 语句
continue 用于跳过当前迭代,继续下一次循环。
// 打印 1 到 10 中的奇数
for (let i = 1; i <= 10; i++) {
if (i % 2 === 0) {
continue // 如果是偶数,跳过本次循环
}
console.log(i) // 只打印奇数:1, 3, 5, 7, 9
}🎮 互动演示:break 与 continue 的区别
break 演示
遇到能被3整除的数就停止:
continue 演示
跳过能被3整除的数:
5.5 3.4 遍历数组与对象
5.5.1 🔍 for…of 循环(遍历值)
for...of 用于遍历可迭代对象(如数组、字符串、Map、Set等)的值。
let fruits: string[] = ['苹果', '香蕉', '橙子']
// for...of 遍历数组的值
for (let fruit of fruits) {
console.log(fruit)
}
// 输出:苹果、香蕉、橙子
// 遍历字符串
let message: string = 'Hello'
for (let char of message) {
console.log(char)
}
// 输出:H、e、l、l、o5.5.2 🔍 for…in 循环(遍历键/索引)
for...in 用于遍历对象的键或数组的索引。
let fruits: string[] = ['苹果', '香蕉', '橙子']
// for...in 遍历数组的索引
for (let index in fruits) {
console.log(`fruits[${index}] = ${fruits[index]}`)
}
// 输出:fruits[0] = 苹果、fruits[1] = 香蕉、fruits[2] = 橙子
// 遍历对象的键
let person = { name: '张三', age: 25, city: '北京' }
for (let key in person) {
console.log(`${key}: ${person[key]}`)
}for…of vs for…in
- 使用
for...of当你需要值 - 使用
for...in当你需要键/索引 - 遍历数组时,优先使用
for...of
5.5.3 🗺️ forEach 方法
数组的 forEach 方法提供了一种更函数式的遍历方式:
let numbers: number[] = [1, 2, 3, 4, 5]
numbers.forEach((value, index) => {
console.log(`索引 ${index}: 值 ${value}`)
})
// 计算所有元素的和
let sum: number = 0
numbers.forEach(value => {
sum += value
})
console.log('总和:' + sum) // 15🎮 互动练习:数组遍历方式对比
选择遍历方式,查看不同遍历方法的效果:
5.6 📝 本章小结
本章我们学习了ArkTS中的控制流语句:
- 条件语句:
if/else用于基本条件判断,switch用于多条件分支 - 循环语句:
for(已知次数)、while(未知次数)、do...while(至少一次) - 循环控制:
break(退出整个循环)、continue(跳过本次迭代) - 遍历方式:
for...of(遍历值)、for...in(遍历键/索引)、forEach(函数式遍历)
5.7 ✏️ 练习
- 编写一个程序,判断一个年份是否是闰年(能被4整除但不能被100整除,或能被400整除)
- 使用
for循环计算 1 到 100 之间所有偶数的和 - 创建一个包含5个姓名的数组,使用
for...of遍历并打印每个姓名 - 使用
while循环实现”猜数字”游戏:程序随机生成一个1-100的数字,用户猜,直到猜对为止