当前位置: 首页 > news >正文

HTML前端开发:JavaScript的条分支语句if,Switch

一、 if 语句:灵活的条件分支

  if 语句是最基础、最常用的条件判断语句。它评估一个条件(通常是一个结果为 true 或 false 的表达式),如果条件为真 (true),则执行紧随其后的代码块;如果为假 (false),则跳过该代码块。

1. 基本语法 (if)

if (condition) {// 当 condition 为 true 时,执行这里的代码
}
  • condition: 放在圆括号 () 内的表达式。这个表达式会被求值,结果会被自动转换为布尔值 (true 或 false)。

  • { ... }: 花括号 {} 包裹的代码块。这是当 condition 为 true 时要执行的语句集合。强烈建议即使只有一行代码也使用花括号,这能提高代码清晰度和避免潜在错误。

 

 举个栗子 🌰:检查年龄是否成年

let age = 20;if (age >= 18) {console.log("恭喜!你已经是成年人了。"); // 因为 20 >= 18 是 true,所以这行会执行
}

 

2. if...else:二选一

  当你想在条件为 true 时执行一个操作,为 false 时执行另一个操作时,就用 else

if (condition) {// condition 为 true 时执行这里
} else {// condition 为 false 时执行这里
}

 

举个栗子 🌰:判断数字正负或零

let number = -5;if (number > 0) {console.log("这个数是正数。");
} else {console.log("这个数不是正数(它是零或负数)。"); // 因为 -5 > 0 是 false,所以执行 else 块
}

3. if...else if...else:多条件分支

  当需要检查多个互斥的条件时,使用 else if。它会按顺序从上到下检查每个条件,执行第一个为 true 的条件对应的代码块。最后的 else 是可选的,用于处理所有条件都不满足的情况。

if (condition1) {// condition1 为 true 时执行
} else if (condition2) {// condition1 为 false 且 condition2 为 true 时执行
} else if (condition3) {// condition1 和 condition2 为 false 且 condition3 为 true 时执行
} else {// 前面所有条件都为 false 时执行 (可选)
}

 

举个栗子 🌰:成绩等级评定

let score = 85;
let grade;if (score >= 90) {grade = 'A';
} else if (score >= 80) { // 注意:因为第一个条件 (>=90) 不满足,才会检查这里grade = 'B'; // 85 >= 80 为 true,所以 grade 被赋值为 'B'
} else if (score >= 70) {grade = 'C';
} else if (score >= 60) {grade = 'D';
} else {grade = 'F';
}console.log("你的成绩等级是:", grade); // 输出: 你的成绩等级是: B

if 语句的关键点:

  • 灵活性高: 条件可以是任何复杂的逻辑表达式(使用 &&||! 等逻辑运算符组合)。

  • 范围判断强: 非常适合判断值是否在某个范围内(如 score >= 80 && score < 90)。

  • 顺序重要: 在 else if 链中,条件的顺序很关键。一旦某个条件满足,后面的 else if 和 else 都不会再检查。因此,通常把更具体或更可能满足的条件放在前面(或者根据逻辑需求排序)。

  • 强制类型转换: condition 会被自动转换为布尔值。0""nullundefinedNaN 会转为 false (称为 falsy 值),其他值转为 true (称为 truthy 值)。理解这一点非常重要!

 

 

二、 switch 语句:精确值匹配的分支

  switch 语句用于基于一个表达式的不同精确值来执行不同的代码分支。它提供了一种比长串 if...else if 更清晰、更易读的方式来处理多个离散选项。

 

1. 基本语法

switch (expression) {case value1:// 当 expression 的结果严格等于 (===) value1 时,执行这里的代码break; // 通常需要 breakcase value2:// 当 expression 的结果严格等于 (===) value2 时,执行这里的代码break;...default:// 如果 expression 的值不等于上面任何一个 case 的值,执行这里的代码 (可选)break;// 虽然 default 的 break 不是必须的(因为它通常是最后一个),但加上是好习惯}
  • expression: 一个表达式(通常是一个变量),它的值会与各个 case 的值进行比较。

  • case valueX:case 关键字后跟一个具体的值(可以是数字、字符串、变量、常量等)。expression 的值会与这个 valueX 进行严格相等比较 (===)

  • break;极其重要! 它用于跳出整个 switch 语句。如果某个 case 匹配成功且没有 break,代码会继续执行下一个 case 里的语句(无论下一个 case 的值是否匹配),直到遇到 break 或 switch 结束。这被称为 "fallthrough" (贯穿)。大多数情况下你需要 break 来避免贯穿。

  • default:: 可选的。它就像一个兜底的 else。如果没有任何 case 匹配 expression 的值,则执行 default 里的代码。虽然 default 可以放在任何位置,但通常放在最后。

 

2. 举个栗子 🌰:根据星期几输出计划

let dayOfWeek = "Wednesday"; // 假设今天是星期三
let plan;switch (dayOfWeek) {case "Monday":plan = "开团队周会";break;case "Tuesday":plan = "写项目代码";break;case "Wednesday":plan = "Code Review 和 学习新技术"; // 匹配成功!plan 被赋值break; // 跳出 switch,防止执行后面的 casecase "Thursday":plan = "修复 Bug";break;case "Friday":plan = "准备周报和 Demo";break;default: // 如果 dayOfWeek 不是周一到周五plan = "周末啦,休息或自由安排!";// 这里的 break 可以省略,因为是最后,但加上更清晰break;
}console.log("今天的计划是:", plan); // 输出: 今天的计划是: Code Review 和 学习新技术

3. switch 语句的关键点

  • 精确匹配: 使用 严格相等 (===) 进行比较。这意味着 1 (数字) 不等于 "1" (字符串)。

  • break 至关重要: 忘记 break 是 switch 语句中最常见的错误之一,会导致意外的逻辑贯穿。除非你明确需要利用贯穿效果(比如多个 case 共享同一段代码),否则每个 case 后面都应该有 break

  • 利用贯穿 (Fallthrough): 有时有意让多个 case 执行同一段代码。这时可以省略中间 case 的 break

let fruit = "Orange";
let message;switch (fruit) {case "Orange":case "Mandarin": // Orange 或 Mandarin 都会触发下一行case "Tangerine":message = "这是个柑橘类水果!";break; // 执行完共享代码后跳出case "Apple":message = "这是个苹果!";break;default:message = "我不认识这种水果。";break;
}console.log(message); // 输出: 这是个柑橘类水果!
  • default 是好习惯: 即使你认为所有情况都覆盖了,加上 default 处理意外值也是防御性编程的好习惯。

  • 适合离散值: 最适合处理一组明确的、离散的值(如枚举、状态码、特定字符串/数字)。

 

三、 if vs switch:如何选择?

  理解它们的特点,就能在合适的地方用合适的工具:

特性if 语句switch 语句
核心比较方式基于条件表达式 (true/false)基于单个表达式的值严格相等 (===) 匹配
条件类型非常灵活:范围判断、复杂逻辑组合相对固定:主要针对离散的、精确的单个值
可读性简单条件时清晰;长串 else if 时可能稍乱多个精确值匹配时非常清晰、结构整齐
贯穿行为无 (if/else if 互斥)有 (case 后需 break 阻止,也可利用)
典型场景范围判断 (age > 18)、布尔组合、非精确匹配枚举值匹配 (星期、月份、状态码、特定选项)

简单选择指南:

  1. 你需要判断一个值是否在某个范围内? (如 score > 90) -> 用 if

  2. 你的条件依赖于多个复杂逻辑的组合? (如 isLoggedIn && (role === 'admin' || role === 'editor')) -> 用 if

  3. 你需要根据一个变量或表达式的精确值,从多个(通常是 3 个或更多)固定选项中选择一个执行路径? (如根据 dayOfWeek 的值执行不同操作) -> 用 switch 通常更清晰。

  4. 只有一两个分支? -> if (或 if...else) 通常更简洁。

  5. 需要多个不同的值触发相同的操作? -> switch 的 fallthrough 特性很方便。

 

决策流程图: 

开始
|
V
需要条件分支? --> 是
|
V
分支基于什么?
|
+--> 基于范围、复杂逻辑? ----------------> 使用 if/else if/else
|
+--> 基于单个变量的精确值匹配多个选项? --> 使用 switch/case (加 break!)
|
V
结束

总结

  • if: 你的万能瑞士军刀,处理各种条件判断(真假、范围、组合逻辑),灵活但处理多个精确匹配时可能稍显冗长。

  • switch: 处理单个变量匹配多个精确值时的利器,结构清晰,可读性好,但要注意 break 和严格相等比较。

http://www.xdnf.cn/news/929863.html

相关文章:

  • HTML前端开发:JavaScript 常用事件详解
  • 4. TypeScript 类型推断与类型组合
  • 分析 java 的 Map<String,Map<String, List<Map<String,Integer>>>>
  • Go语言并发模型与模式:Worker Pool 模式
  • 详解鸿蒙Next仓颉开发语言中的动画
  • 勒让德多项式
  • 投屏技术深度解析:从原理到成功率优化实战·优雅草卓伊凡
  • 高级数据结构与算法期末考试速成记录2
  • exec进程替换函数族
  • AOSP CachedAppOptimizer中的冻结和内存压缩功能
  • 11.无重复字符的最长子串
  • LUFFY(路飞): 使用DeepSeek指导Qwen强化学习
  • 34 C 语言字符串转数值函数详解:strtol、strtoll、strtoul、strtoull(含 errno 处理、ERANGE 错误)
  • 创建一个纯直线组成的字体库
  • 【强连通分量 缩点 最长路 拓扑排序】P2656 采蘑菇|普及+
  • Linux 文本三剑客(grep, awk, sed)
  • 运维_集运维核心学习
  • xctf-weak_auth(弱口令)
  • 【C++ 真题】P1747 好奇怪的游戏
  • 23、字节对齐
  • 22、模板特例化
  • WPF 播放器(AudioPlayer 2025)
  • triton学习笔记6: Fused Attention
  • CAN转PROFINET网关设备基本功能介绍
  • Android资源ID冲突解决方案
  • 28、元组的遍历
  • Redis :String类型
  • 第23讲、Odoo18 邮件系统整体架构
  • AIGC行业发展演进:从技术萌芽到智能革命
  • 全面解析:tzst 归档格式的先进性与跨平台文件管理指南