CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
JavaScript 核心/课时/条件与循环
RawBlame
课时目录12 节

JavaScript 核心

  1. 01JavaScript 是什么
  2. 02类型与变量
  3. 03运算符与类型转换
  4. 04条件与循环
  5. 05函数与作用域
  6. 06数组与常用方法
  7. 07对象与 JSON
  8. 08DOM 与事件
  9. 09异步 Promise 与 async/await
  10. 10ES Module 与 npm 概览
  11. 11错误处理与调试
  12. 12综合练习与下一步

条件与循环

if/switch、for/while、break/continue。

30 分钟

条件与循环

这一课你将能做到

  1. 写出清晰的 if / else,并用「提前 return」减少嵌套
  2. 用 for 与 for...of 遍历数组,并知道为何别用 for...in 扫数组
  3. 读懂简单的三元表达式 ? :,知道何时该改回 if

为什么要学

程序几乎都在做两件事:判断(够不够条件)和重复(列表每一项做一次)。
写得绕,自己下周也看不懂——所以我们强调「扁平、好读」。

评级、校验表单、渲染列表,全都是条件 + 循环的组合。
把分支写清楚,比背更多语法更重要。

先建立图像

如果(条件成立)→ 做 A
否则 → 做 B

重复:对列表里每一个 x → 做一件事
写法适合
if / else if / else多数业务分支
三元 ? :很短的二选一赋值
for需要下标、或经典计数循环
for...of直接取数组元素(常用)
while「不确定次数,直到某条件」
卫语句(提前 return):
  先把「不合格」拦下并离开
  后面只写「开心路径」
  → 嵌套变浅,好读好改

跟着做

步骤 1:if 与提前离开

控制台或脚本:

function canEnter(age) {
  // 先拦无效 —— 卫语句
  if (!Number.isFinite(age)) {
    return "年龄无效";
  }
  if (age < 18) {
    return "未成年,不能进入";
  }
  // 开心路径:到这里说明合法且成年
  return "可以进入";
}

console.log(canEnter(20)); // 可以进入
console.log(canEnter(15)); // 未成年…
console.log(canEnter(NaN)); // 年龄无效

「提前 return」人话:不合格就马上结束,后面只写正常情况。比层层 else 好读。

步骤 2:三元(短判断)与何时别用

const age = 20;
const label = age >= 18 ? "成年" : "未成年";
console.log(label);

// 反例:套太多三元 → 难维护,请改 if
// const g = score >= 90 ? "A" : score >= 75 ? "B" : "C";

适合很短的二选一。逻辑一长,请改回 if。

步骤 3:经典 for 与 for...of

const lessons = ["HTML", "CSS", "JS"];

// 方式 A:需要下标时
for (let i = 0; i < lessons.length; i++) {
  console.log(i, lessons[i]);
}

// 方式 B:直接取元素(更常用)
for (const title of lessons) {
  console.log(title);
}

// 不推荐:用 for...in 遍历数组(会碰到非数字键、顺序坑)
// for (const k in lessons) { ... }

你应看到下标版打印 0 HTML 等,for...of 只打印标题。

步骤 4:break / continue

const nums = [1, 2, 3, 4, 5];
for (const n of nums) {
  if (n === 3) continue; // 跳过 3,进入下一轮
  if (n === 5) break;    // 遇到 5 结束整个循环
  console.log(n);
}
// 预期输出:1 2 4

break 跳出循环;continue 跳到下一轮。先会读,再按需用。

步骤 5:小页面——打分评级

保存为 js-control.html:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>条件与循环</title>
</head>
<body>
  <input id="score" type="text" placeholder="0-100" />
  <button type="button" id="go">评级</button>
  <p id="out"></p>
  <script>
    function gradeOf(score) {
      if (!Number.isFinite(score) || score < 0 || score > 100) {
        return null; // 用 null 表示无效,交给调用方提示
      }
      // 顺序很重要:先判高分
      if (score >= 90) return "A";
      if (score >= 75) return "B";
      if (score >= 60) return "C";
      return "D";
    }

    document.getElementById("go").addEventListener("click", function () {
      const score = Number(document.getElementById("score").value);
      const out = document.getElementById("out");
      const grade = gradeOf(score);
      if (grade === null) {
        out.textContent = "请输入 0-100 的数字";
        return;
      }
      out.textContent = "等级:" + grade;
    });
  </script>
</body>
</html>

试:95→A,80→B,50→D,abc→提示无效。

步骤 6:循环渲染列表到页面

在同一页追加:

<ul id="ul"></ul>
<script>
  const titles = ["变量", "运算符", "条件与循环"];
  const ul = document.getElementById("ul");
  for (const title of titles) {
    const li = document.createElement("li");
    li.textContent = title; // 改文本优先 textContent
    ul.appendChild(li);
  }
</script>

刷新后应看到三条列表。这是后面 DOM 课与数组课的预热:数据在数组里,循环生成界面。

讲清楚要点

  1. 因为嵌套越深越难读,所以用卫语句提前 return,把开心路径留在最后。
  2. 因为 else if 从上到下匹配,所以分数档位要先写高门槛再写低门槛。
  3. 因为数组是有序列表,所以遍历值用 for...of;需要下标再用经典 for。
  4. 因为 for...in 面向「可枚举键」,所以不要用它遍历数组。
  5. 因为三元只适合短表达式,所以分支一复杂就改回 if。
  6. 因为循环里改正在遍历的数组容易乱,所以初学先只读遍历;删改用数组方法或先收集再处理。

你可能会懵的地方

  • else if 顺序很重要
    先判断 >=90 再 >=75。写反会逻辑错:90 可能被判成 B。

  • 循环里改正在遍历的数组
    下标会跳、会漏。初学先只读;要删元素可先 filter 出新数组。

  • 开关语句 switch
    适合「同一个变量多种固定取值」。先会 if 即可;需要时查 MDN,并记住多数情况要写 break。

  • while (true) 忘了 break
    页面可能卡死。写循环前先想清楚结束条件。

错法对照

错法问题正解
箭头型深层 if难读难改卫语句提前 return
for...in 遍历数组奇怪键、顺序坑for...of 或数组方法
三元套三元难维护改 if
分数档位顺序写反高等级永远进不去先高后低
循环条件写错导致死循环页面卡死先写清结束条件再运行

自测三问

  1. 什么叫卫语句(提前 return)?举你写过的例子。
  2. for 与 for...of 何时选哪个?
  3. 为何不建议用 for...in 遍历数组?

小结一句话

判断求清晰,循环求直接;用提前 return 压扁分支,遍历数组优先 for...of,档位判断注意顺序。

延伸

  • MDN:控制流
  • MDN:for...of
  • 下一课:函数与作用域——把逻辑打包成可复用块。
加载本节练习…
← 上一课运算符与类型转换下一课 →函数与作用域