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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
JavaScript 进阶/课时/控制流深入
RawBlame
课时目录12 节

JavaScript 进阶

  1. 01JS 进阶地图
  2. 02变量与提升
  3. 03运算符与相等
  4. 04控制流深入
  5. 05函数与 this
  6. 06异步深入
  7. 07对象与原型
  8. 08集合与 JSON
  9. 09模块系统
  10. 10内存与 GC
  11. 11调试与异常
  12. 12综合练习

控制流深入

conditionals、switch、for/for-in/for-of、break/continue。

30 分钟

控制流深入

javascript-core 覆盖 if/for 基础;本课深入 switch 穿透、for-in vs for-of、标签与 break/continue,以及可迭代协议——为理解数组高阶方法与 react-essentials 列表渲染打基础。

学习目标

  • 正确使用 switch 与 break
  • 区分 for-in(键)与 for-of(值)
  • 理解可迭代对象与 for-of 的关系

switch 与穿透

function httpLabel(code) {
  switch (code) {
    case 200:
    case 201:
      return '成功';
    case 404:
      return '未找到';
    default:
      return '其他';
  }
}

忘记 break 会穿透到下一 case——有时故意利用,多数情况是 bug。

for / while / do-while

const lessons = ['intro', 'types', 'functions'];
for (let i = 0; i < lessons.length; i++) {
  console.log(i, lessons[i]);
}

let n = 0;
while (n < 3) n++;

do {
  // 至少执行一次
} while (false);

for-in vs for-of

const arr = ['a', 'b'];
for (const index in arr) {
  console.log(index); // '0', '1'(字符串键,含继承可枚举属性)
}

for (const value of arr) {
  console.log(value); // 'a', 'b'
}

const map = new Map([['x', 1]]);
for (const [k, v] of map) {
  console.log(k, v);
}

for-in 遍历对象可枚举键(含原型链,需 hasOwnProperty 过滤);for-of 遍历可迭代对象的值。

break / continue 与标签

outer: for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    if (i === 1 && j === 1) break outer;
  }
}

标签 break 在嵌套循环中跳出外层;日常代码优先重构为函数 + return。

可迭代与展开

const set = new Set([1, 2, 2, 3]);
const unique = [...set]; // [1, 2, 3]

function* idGen() {
  let id = 0;
  while (true) yield ++id;
}
const gen = idGen();
gen.next().value; // 1

自定义类实现 [Symbol.iterator]() 即可 for-of 遍历。

与框架列表渲染

// React 思想:map 替代手动 for
const items = tracks.map((t) => ({ id: t.slug, label: t.title }));

nodejs-essentials 流(Stream)也是异步可迭代,可用 for await...of 消费。

练习

  • 写 switch 处理 HTTP 状态码,含故意穿透与 break 修复
  • 对 { a: 1, b: 2 } 分别用 for-in 和 Object.entries + for-of
  • 实现带 [Symbol.iterator] 的简单范围生成器 range(1, 5)

小结

switch 注意 break;for-of 遍历值;可迭代协议统一集合遍历。 下一课函数与 this。

加载本节练习…
← 上一课运算符与相等下一课 →函数与 this