控制流语句是 JavaScript 程序执行路径的核心调控机制,通过条件判断、循环迭代和流程跳转实现复杂逻辑。根据执行逻辑可分为三大类:条件语句(if、switch)、循环语句(for、while、do-while)和跳转语句(break、continue、return),这些语句共同构成了程序的执行骨架[3]。
条件语句通过判断表达式真伪决定代码分支,其中 if-else 和 switch 是最常用的实现方式。以下通过"学生成绩评级"案例(分数 0-100 对应 A-E 等级)对比两者的适用场景。
if-else 实现(适合范围判断):
function getGradeWithIf(score) {
if (score >= 90 && score <= 100) return 'A';
else if (score >= 80 && score < 90) return 'B';
else if (score >= 70 && score < 80) return 'C';
else if (score >= 60 && score < 70) return 'D';
else if (score >= 0 && score < 60) return 'E';
else return 'Invalid score';
}
switch 实现(适合固定值匹配):
function getGradeWithSwitch(score) {
const level = Math.floor(score / 10); // 将分数转换为 0-10 区间整数
switch (level) {
case 10:
case 9: return 'A'; // 合并 90-100 区间
case 8: return 'B';
case 7: return 'C';
case 6: return 'D';
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: return 'E';
default: return 'Invalid score';
}
}
核心差异与适用场景:
score >= 90)和复杂条件组合(如 score > 80 && attendance === 100%),但多分支时嵌套层级可能影响可读性。 case 匹配离散值,适合单变量多状态判断(如枚举值、区间转换后的值),使用 break 避免穿透,多分支时结构更扁平。 循环语句用于重复执行代码块,for 循环因初始化、条件判断、迭代器的集成特性,常用于已知循环次数的场景。以"素数判断"(判断正整数 n 是否为素数)为例,演示循环控制流及跳转语句的优化作用。
素数判断逻辑:素数是大于 1 且仅能被 1 和自身整除的整数。常规实现需检查 2 至 n-1 的所有除数,但通过数学优化可缩小至 2 至 √n(若 n 存在非自身因数,必有一个小于等于 √n)。
基础实现:
function isPrimeBasic(n) {
if (n <= 1) return false; // 排除 <=1 的数
for (let i = 2; i < n; i++) { // 检查 2 至 n-1
if (n % i === 0) return false; // 找到除数,非素数
}
return true;
}
优化实现(引入 break 和数学优化):
function isPrimeOptimized(n) {
if (n <= 1) return false;
if (n === 2) return true; // 2 是唯一偶素数
if (n % 2 === 0) return false; // 排除偶数
const sqrtN = Math.sqrt(n); // 计算平方根
for (let i = 3; i <= sqrtN; i += 2) { // 步长 2(仅检查奇数)
if (n % i === 0) {
break; // 找到除数,立即退出循环
}
}
return true;
}
跳转语句作用:
ES2023 引入的模式匹配(Pattern Matching)提供了比 switch 更强大的结构化数据匹配能力,尤其适合复杂对象或数组的条件判断。其基础语法通过 match 关键字结合模式解构实现:
// 匹配对象类型并提取属性
const shape = { type: 'circle', radius: 5 };
const area = match (shape) {
{ type: 'circle', radius: r } => Math.PI * r **2, // 匹配圆形并计算面积
{ type: 'rectangle', width: w, height: h } => w * h, // 匹配矩形
_ => 0 // 默认情况(类似 switch 的 default)
};
模式匹配支持多种模式(如数组模式、值模式、绑定模式),可嵌套使用,大幅简化复杂条件逻辑的代码量。作为 JavaScript 高级特性,其设计理念与函数式编程的解构思想一脉相承,将在后续"函数式编程"章节深入探讨。
控制流语句的合理使用直接影响代码的执行效率与可维护性:条件判断需根据场景选择 if-else 或 switch;循环设计应结合数学优化与跳转语句减少无效计算;而模式匹配则为未来复杂数据结构的处理提供了更优雅的解决方案。