javascript条件语句如何控制流程?【教程】

11次阅读

javaScript条件语句本身不控制流程,真正影响流程的是if/else/switch结构及其中的return、breakcontinue或异常;布尔判断、范围比较、函数调用必须用if,switch仅支持严格相等匹配。

javascript条件语句如何控制流程?【教程】

javascript 条件语句本身不“控制流程”——它只是根据表达式真假,决定执行哪一段代码;真正影响流程走向的是你写的 ifelse ifelseswitch 结构和其中是否包含 returnbreakcontinue 或异常抛出。

什么时候用 if 而不是 switch

当判断依据是布尔表达式、范围比较(如 age >= 18)、或需要调用函数得出结果时,必须用 if。而 switch 只做严格相等(===)匹配,且只接受原始值或字符串作为 case 值。

  • switch 遇到 case 0: 不会匹配 false 或空数组,因为不进行类型转换
  • 多个 case 想共享逻辑,得显式写 break,漏掉就会“穿透”,这是最常见 bug 来源
  • 如果判断逻辑含 user.role === 'admin' || user.permissions.includes('delete'),只能写在 if

if 中的真值与假值陷阱

JavaScript 会把非布尔值自动转为布尔上下文,但 0''NULLundefinedNaNfalse 全部是假值——哪怕 '' 是合法字符串,0 是有效数字。

  • 检查对象属性是否存在,别直接写 if (obj.name),因为 name 可能是 ''0,该显示却跳过了
  • 更安全写法是 if ('name' in obj)if (obj.hasOwnProperty('name'))(注意原型链)
  • 想确认变量已定义且非空,用 if (obj?.name != null)(可选链 + 非空检查)

switchdefault 必须写,且最好放在最后

即使你认为所有情况都覆盖了,也要加 default。它不只是“兜底”,更是调试线索:一旦进入 default,说明有未预期值出现,比如 API 返回了新字段、枚举值被后端扩展了。

立即学习Java免费学习笔记(深入)”;

switch (status) {   case 'success':     handleSuccess();     break;   case 'error':     handleError();     break;   default:     console.warn('Unknown status:', status); // 关键日志     throw new Error(`Unhandled status: ${status}`); }
  • 不写 default,遇到未知值就静默跳过,问题难定位
  • 如果 default 在中间或开头,容易因漏写 break 导致后续 case 也被执行
  • 某些 Linter(如 ESLint)会强制要求 default 存在,不是为了形式,是防错

嵌套太深?试试提前 return 或卫语句

三层以上 if 嵌套会让逻辑难以阅读和测试。与其写 if (a) { if (b) { if (c) { ... } } },不如把否定条件提前处理。

function processOrder(order) {   if (!order) return; // 卫语句   if (order.status !== 'pending') return;   if (!order.items?.length) return;    // 此处才处理主逻辑,缩进减少,意图清晰   chargePayment(order);   updateInventory(order); }
  • 提前 return 不等于“不处理错误”,而是把边界条件隔离出来
  • 避免 else 块包裹大片业务逻辑,那会让核心路径被掩盖
  • 如果函数必须返回值,卫语句可用 return nullreturn promise.resolve() 等明确占位

条件分支越靠近数据源头(比如刚从 API 拿到响应就做判断),后续代码就越干净;拖到函数末尾再集中处理,往往意味着状态已经污染、副作用已发生。

text=ZqhQzanResources