JavaScript
JavaScript 修炼之道:从小白到全栈高手(融合版)
前言
- 本书学习路线图:从零基础到全栈高手的进阶路径
- 如何使用本书:代码练习、章节依赖与阅读建议
- 作者致谢与贡献者
第一篇 入门准备与学习心法
第1章 JavaScript 全景与学习地图
1.1 JavaScript 能做什么?——从网页交互到服务器、移动端、桌面应用
1.2 JavaScript 简史与 ECMAScript 版本演进
1.3 浏览器中的 JavaScript 与 Node.js 的分工
1.4 本书的学习路径与高手成长模型
第2章 环境搭建与开发工具
2.1 安装 VS Code 与推荐插件
2.2 安装 Node.js 与 npm 初探
2.3 浏览器开发者工具(DevTools)全景
2.4 在线代码演练场(CodePen / CodeSandbox)的使用
第3章 第一个 JavaScript 程序
3.1 在浏览器控制台说 Hello World
3.2 用 Node.js 运行脚本
3.3 编写第一个 HTML 页面并与 JavaScript 交互
3.4 程序的基本结构:语句、注释与分号
第4章 学会学习:报错、调试与查文档
4.1 读懂错误信息:常见的语法错误与运行时错误
4.2 使用 console 调试与断点调试入门
4.3 如何高效查阅 MDN Web Docs
4.4 寻找答案的艺术:Stack Overflow、AI 与社区
第二篇 语言基础——写出第一行可靠代码
第5章 变量、常量与命名规范
5.1 变量声明:var、let、const 的区别与最佳实践
5.2 标识符命名规则与驼峰式
5.3 变量的数据类型动态性
5.4 常量与不可变性初识
第6章 基本数据类型
6.1 数字(number)与特殊数值 NaN、Infinity
6.2 字符串(string)与模板字面量
6.3 布尔值(boolean)与真假判断
6.4 null 与 undefined:有心无物 vs 无心
6.5 Symbol 的独特性与使用场景
6.6 BigInt:处理超大整数
第7章 运算符与表达式
7.1 算术、赋值与比较运算符
7.2 逻辑运算符与短路求值
7.3 位运算符、条件三元运算符
7.4 运算符优先级与括号的使用
第8章 类型转换的明与暗
8.1 显式类型转换:String()、Number()、Boolean()
8.2 隐式类型转换的规则与陷阱
8.3 == 与 === 的严格比较
8.4 避免常见的类型转换 bug
第9章 流程控制:条件与循环
9.1 if...else、else if 与多分支决策
9.2 switch 语句与穿透风险
9.3 循环:for、while、do...while 的经典用法
9.4 for...of 与 for...in 的区别与应用
9.5 break、continue 与标签语句
第10章 函数基础——代码复用的基石
10.1 函数声明与函数表达式
10.2 参数与返回值
10.3 默认参数、剩余参数与参数解构(初步)
10.4 函数是一等公民:赋值、传参与回调
第11章 数据结构:数组与初识集合
11.1 数组的创建、索引与长度
11.2 常用数组方法:push、pop、shift、unshift、splice、slice
11.3 遍历数组:forEach、map、filter、reduce 初探
11.4 多维数组与数组解构
第12章 对象基础——万物皆可对象
12.1 对象字面量与属性访问
12.2 属性的增删改查与方括号语法
12.3 对象方法简写与 this 第一印象
12.4 遍历对象:for...in 与 Object.keys()
第13章 内置对象的常用操作
13.1 字符串:常用方法、正则表达式入门
13.2 数字与 Math 对象
13.3 日期与时间处理(Date)
13.4 JSON 解析与序列化
第三篇 写出可维护的代码——工程素养萌芽
第14章 作用域与提升
14.1 词法作用域与块级作用域
14.2 var 的变量提升与函数提升
14.3 let、const 的暂时性死区
14.4 全局作用域与模块作用域初识
第15章 解构、展开与剩余语法
15.1 数组解构与默认值
15.2 对象解构与嵌套解构
15.3 展开语法在数组与对象中的妙用
15.4 剩余参数与 arguments 对象
第16章 模块化:代码的封装与复用
16.1 模块化的必要性:全局污染与依赖管理
16.2 历史方案:IIFE、CommonJS、AMD
16.3 ES Modules(ESM):export 与 import
16.4 默认导出与命名导出、静态与动态导入
16.5 import.meta 与模块工作原理
第17章 错误处理与防御性编程
17.1 try...catch...finally 的用法
17.2 抛出自定义错误与 Error 对象
17.3 错误的传播与全局捕获
17.4 防御性编程:尽早失败与断言
第18章 代码风格、命名与重构入门
18.1 为什么代码风格重要
18.2 命名艺术:有意义的变量、函数与类
18.3 注释:解释为什么,而不是做了什么
18.4 函数分解与重构的基本技巧
第四篇 函数与闭包——迈向高阶的阶梯
第19章 函数进阶:表达式、箭头与回调
19.1 函数表达式与命名函数表达式的区别
19.2 箭头函数的简洁语法与行为差异(this、arguments)
19.3 高阶函数:接收或返回函数的函数
19.4 回调函数模式与局限性
第20章 this 全面解密
20.1 调用模式决定 this:函数、方法、构造器与间接调用
20.2 call、apply 与 bind 的原理与应用
20.3 箭头函数的 this 永久绑定机制
20.4 常见 this 指向问题与修复方法
第21章 闭包:概念、原理与威力
21.1 闭包是什么:作用域与持久数据的交汇
21.2 闭包的形成条件与内存影响
21.3 实战:函数工厂、私有变量与模块模式
21.4 柯里化与偏函数:利用闭包实现参数复用
21.5 闭包的陷阱:循环中的变量与块级作用域
第22章 函数式编程初步
22.1 纯函数与副作用
22.2 不可变性(immutability)
22.3 组合(compose)与管道(pipe)
22.4 实用的高阶工具:once、memoize、debounce、throttle
第五篇 对象、原型与面向对象——理解 JavaScript 的本质
第23章 深入对象
23.1 属性描述符:value、writable、enumerable、configurable
23.2 Object.defineProperty 与访问器属性(getter/setter)
23.3 对象密封、冻结与可扩展性
23.4 可选链操作符(?.)与空值合并(??)
第24章 原型与原型链
24.1 每个对象都有原型:proto 与 prototype
24.2 原型链的工作机制与属性查找
24.3 借用原型与 Object.create
24.4 instanceof 操作符的判定原理
第25章 构造器与继承模式
25.1 构造函数与 new 的过程
25.2 原型链继承、盗用构造函数继承与组合继承
25.3 寄生组合继承与最佳实践
25.4 继承中出现的引用值共享问题
第26章 ES6 类语法
26.1 class 声明与本质(还是原型)
26.2 constructor、方法、静态方法与静态属性
26.3 extends 与 super 内部机制
26.4 类的私有字段、公共字段与静态私有
第27章 面向对象设计与组合思想
27.1 继承的局限与“组合胜过继承”
27.2 混入(Mixin)模式
27.3 多态与鸭子类型
27.4 面向对象设计原则(开闭原则、单一职责)入门
第28章 对象操作深度实践
28.1 浅拷贝与深拷贝:手写实现与 structuredClone
28.2 对象引用的陷阱与防御
28.3 遍历与迭代:Iterator 协议与 for...of
28.4 Map、Set、WeakMap、WeakSet 实战场景
第六篇 异步编程——征服 JavaScript 的灵魂
第29章 异步编程基础
29.1 同步与异步模型、阻塞与非阻塞
29.2 事件驱动与回调模式
29.3 发布-订阅模式与事件触发器
29.4 定时器:setTimeout、setInterval 与异步调度
第30章 Promise 深入剖析
30.1 Promise 的一生:pending、fulfilled、rejected
30.2 then、catch、finally 链式调用
30.3 Promise 静态方法:resolve、reject、all、race、allSettled、any
30.4 Promise 链中的错误传播与中断
第31章 手写 Promise 核心实现
31.1 实现状态管理与 then 方法
31.2 处理异步与回调队列
31.3 实现链式调用与值穿透
31.4 实现静态方法与 Promise.resolve 的展开
第32章 事件循环:微任务与宏任务
32.1 浏览器的进程模型与事件循环
32.2 宏任务(script、setTimeout、I/O)与微任务(Promise、MutationObserver)
32.3 渲染时机与事件循环的关系
32.4 Node.js 的事件循环与 nextTick
第33章 生成器与 async/await
33.1 生成器函数(function*)与 yield
33.2 迭代器的自动执行与生成器的使用
33.3 async/await 是语法糖:从生成器到异步函数
33.4 异步迭代与 for await...of
33.5 async/await 的错误处理与并发
第34章 异步实战模式
34.1 请求超时、重试与指数退避
34.2 防抖(debounce)与节流(throttle)
34.3 并发控制:限制最大并发量
34.4 资源预加载与懒加载
第七篇 浏览器编程——掌控运行环境
第35章 DOM 操作与性能优化
35.1 Document 对象与节点查找
35.2 创建、修改、删除元素与批量操作
35.3 重排(reflow)与重绘(repaint)的最小化
35.4 文档片段(DocumentFragment)与虚拟滚动初步
第36章 事件系统全解
36.1 事件流三阶段:捕获、目标、冒泡
36.2 addEventListener 与事件选项(once、passive)
36.3 事件委托:原理与性能优势
36.4 自定义事件(CustomEvent)与跨组件通信
第37章 表单与用户输入
37.1 表单元素与事件(input、change、submit)
37.2 表单校验:约束验证 API 与自定义校验
37.3 聚焦管理(focus/blur)与键盘事件
37.4 拖拽 API 与剪贴板操作
第38章 浏览器数据存储
38.1 Cookie:原理、安全属性(HttpOnly、SameSite)
38.2 Web Storage:localStorage 与 sessionStorage
38.3 IndexedDB:客户端数据库入门
38.4 存储选型与同步策略
第39章 网络请求与跨域
39.1 Fetch API:GET、POST、文件上传、进度监控
39.2 中断请求:AbortController
39.3 跨域资源共享(CORS)与 JSONP
39.4 WebSocket:双向实时通信基础
39.5 Server-Sent Events(SSE)简介
第40章 高级浏览器 API 实战
40.1 观察器:MutationObserver 与 IntersectionObserver
40.2 Web Worker:多线程计算与通信
40.3 Service Worker 与 PWA 离线缓存
40.4 Canvas 基础、Web Audio 与 WebRTC 概览
第41章 前端安全基础
41.1 跨站脚本(XSS):反射型、存储型与 DOM 型防御
41.2 跨站请求伪造(CSRF)与 SameSite Cookie
41.3 内容安全策略(CSP)
41.4 HTTPS 与浏览器沙箱机制
第八篇 Node.js 后端开发——打通全栈脉络
第42章 Node.js 核心概念
42.1 Node.js 与浏览器 JavaScript 的差异
42.2 事件驱动与非阻塞 I/O
42.3 全局对象:global、process、Buffer
42.4 模块系统:CommonJS 与 ES Modules 在 Node.js 中的使用
第43章 核心模块与文件操作
43.1 path、url、querystring 常用方法
43.2 fs 模块:同步/异步读写、流(Stream)
43.3 环境变量与 process.env
43.4 子进程与 cluster 模块简介
第44章 npm 与包管理精要
44.1 package.json 详解:依赖、脚本与配置
44.2 npm/yarn/pnpm 的使用与 lockfile
44.3 语义化版本(SemVer)与包更新策略
44.4 发布一个 npm 包
第45章 构建 HTTP 服务与 REST API
45.1 使用 http 模块创建服务器
45.2 请求与响应对象
45.3 Express/Fastify 路由、中间件与错误处理
45.4 RESTful API 设计原则与最佳实践
第46章 数据持久化
46.1 关系型数据库:SQLite/PostgreSQL 与 SQL 基础
46.2 Node.js 数据库驱动:pg、sequelize/knex
46.3 MongoDB 与 Mongoose ODM 入门
46.4 Redis 缓存与会话存储
第47章 身份认证与授权
47.1 Session 与 Cookie 认证
47.2 JWT 令牌认证实现
47.3 密码哈希(bcrypt)与安全存储
47.4 OAuth2 第三方登录流程简介
第48章 后端工程化与部署
48.1 日志管理(winston/pino)
48.2 配置管理与环境区分
48.3 错误处理中间件与全局异常捕获
48.4 部署基础:Docker、CI/CD 与云服务
第九篇 现代前端工程化——从脚本到专业项目
第49章 模块打包与构建工具
49.1 为什么需要打包工具:资源处理与优化
49.2 Vite 的极速开发体验与原理
49.3 Webpack 核心概念:loader、plugin
49.4 Babel 与代码转译:配置与 polyfill
第50章 代码质量与规范
50.1 ESLint 规则配置与自定义
50.2 Prettier 与代码格式化统一
50.3 Git Hooks(Husky)与 lint-staged
50.4 编码规范文档与团队协作
第51章 TypeScript 高手之路
51.1 类型注解、接口与类型别名
51.2 联合类型、交叉类型与字面量类型
51.3 泛型与条件类型
51.4 工具类型(Partial、Pick、Record 等)
51.5 声明文件与从 JS 迁移到 TS 实战
第52章 测试体系
52.1 测试分类与测试金字塔
52.2 单元测试:Jest/Vitest 断言、模拟与快照
52.3 组件测试与 API 测试
52.4 端到端测试:Playwright 基础
52.5 测试驱动开发(TDD)流程
第53章 优化与部署
53.1 代码分割与懒加载
53.2 Tree Shaking 与 Scope Hoisting
53.3 环境变量配置与多环境构建
53.4 前端部署策略:CDN、缓存策略与回滚
第十篇 架构思想与范式——从用轮子到造轮子
第54章 框架思想与声明式编程
54.1 从直接操作 DOM 到数据驱动视图
54.2 React 核心思想:虚拟 DOM、组件化、Hooks
54.3 Vue 核心思想:响应式、模板与组合式 API
54.4 状态管理:集中式(Redux/Pinia)与分布式
54.5 路由:前端路由原理与 SPA
第55章 响应式原理动手实现
55.1 发布-订阅模式与依赖收集
55.2 手写一个简易响应式系统(基于 Object.defineProperty)
55.3 Proxy 与 Reflect 实现深层响应式
55.4 Signal(信号)与现代框架趋势
第56章 设计模式在 JavaScript 中的应用
56.1 创建型:单例、工厂、建造者
56.2 结构型:适配器、装饰器、代理
56.3 行为型:观察者、策略、命令、状态
56.4 框架中的设计模式赏析(如 React 的 Hooks 模式)
第57章 函数式编程进阶
57.1 函数组合与 Point-Free 风格
57.2 Functor、Applicative 与 Monad 简介
57.3 实际应用:数据管道、Either/Maybe 处理空值
57.4 不可变数据库(Immer)与时间旅行
第58章 元编程:Proxy 与 Reflect
58.1 Proxy 拦截器详解:get、set、deleteProperty 等
58.2 响应式系统再探与数据校验
58.3 日志、权限与性能监控的元编程实现
58.4 Reflect 反射工具集与 Proxy 的配合
第59章 前端渲染模式与全栈架构
59.1 客户端渲染(CSR)的优劣
59.2 服务端渲染(SSR)与 Next.js/Nuxt 原理
59.3 静态站点生成(SSG)与增量静态再生(ISR)
59.4 微前端与模块联邦思想
第十一篇 高手内功——性能、内存与引擎
第60章 极致性能优化
60.1 加载性能:资源预加载、缓存、图片优化
60.2 运行时性能:虚拟列表、Web Worker、WASM
60.3 编译时优化与 Tree Shaking 深入
60.4 性能测量与 Lighthouse 审计
第61章 内存管理与泄漏排查
61.1 V8 垃圾回收机制:分代回收、标记-清除、增量与并发
61.2 常见内存泄漏:全局变量、闭包未释放、定时器
61.3 使用 Chrome DevTools 内存快照与时间线分析
61.4 弱引用:WeakRef 与 FinalizationRegistry
第62章 JavaScript 引擎内部探秘
62.1 引擎概览:V8 的解析、解释与编译流水线
62.2 隐藏类(Hidden Classes)与内联缓存
62.3 JIT 优化与去优化(deopt)的触发场景
62.4 编写对引擎友好的代码
第十二篇 项目实战——从 0 到 1 构建全栈应用
第63章 项目一:记账应用
- 纯前端交互、LocalStorage 存储、图表展示
第64章 项目二:Markdown 在线编辑器
- 文件处理、marked 库、自定义渲染
第65章 项目三:天气与地图应用
- 第三方 API 调用、Geolocation、地图集成
第66章 项目四:后台管理系统
- CRUD 操作、路由权限、图表仪表盘
第67章 项目五:Node.js RESTful API 服务
- Express + PostgreSQL、用户与文章 API、API 文档
第68章 项目六:实时聊天室
- WebSocket 通信、在线列表、消息存储
第69章 项目七:发布自己的 npm 工具包
- 编写、测试、文档、发布与版本管理
第70章 终极全栈项目:在线协作白板
70.1 需求分析与技术选型
70.2 前端架构:Canvas 绘图、工具栏与图层
70.3 后端架构:Node.js + WebSocket 实时同步
70.4 冲突解决、撤销重做与权限控制
70.5 测试、Docker 容器化与 CI/CD 部署
第十三篇 成长之道——从会写到会成长
第71章 如何高效阅读源码
71.1 确定目标、抓住骨架、忽略细节
71.2 调试法:用测试和断点追踪逻辑
71.3 绘制架构图与写注释
71.4 开源项目源码阅读实战(mini-react、redux 等)
第72章 学习资源的利用与创造
72.1 如何查阅 MDN 与规范文档
72.2 从问题到答案:Stack Overflow、GitHub Issues
72.3 建立知识库与写技术博客
72.4 参与开源社区的正确姿势
第73章 调试与线上问题定位
73.1 浏览器与 Node.js 调试高阶技巧
73.2 线上错误监控(Sentry)与日志分析
73.3 性能问题与内存问题的排查流程
73.4 常见线上故障演习
第74章 代码 Review 与团队协作
74.1 Review 的心态与目的
74.2 审查清单:逻辑、安全、性能、可读性
74.3 接收反馈与建设性评论
74.4 Git 工作流与协作规范
第75章 JavaScript 常见陷阱与反模式
75.1 类型与比较的坑
75.2 异步与事件循环的常见错误
75.3 原型与 this 的隐晦问题
75.4 反模式:回调地狱、上帝对象、过度工程
第76章 面试指南与核心题解
76.1 高频手写题:防抖节流、深拷贝、Promise、bind
76.2 运行机制题:事件循环、闭包、变量提升
76.3 算法与数据结构(JavaScript 实现)
76.4 项目与系统设计问答策略
第77章 成为全栈工程师的学习地图
77.1 前端深度:框架原理、工程化、跨端
77.2 后端广度:数据库、架构、分布式
77.3 DevOps 基础:容器化、CI/CD、监控
77.4 软技能:沟通、写作、时间管理
第78章 推荐资源与终身学习
78.1 必读书籍与技术博客
78.2 优质网站、播客与会议
78.3 个人品牌建设与职业规划
附录
附录 A ES2015–ES2024 新特性速查表
- 按年份列出关键特性及其简例
附录 B JavaScript 编码风格指南
- Airbnb、Standard、Google 风格摘要与建议
附录 C 工具与资源索引
- 开发工具、库、框架、学习平台分类索引
附录 D 各章习题参考答案与代码仓库
- 在线运行地址与克隆方式
全书设计宗旨:让零基础学习者既能拥有“保姆级”的入门引导和元技能训练,又能获得深入语言骨髓的原理剖析与工程化、全栈实战经验。通过循序渐进的阶梯式结构,完成从“会写 JavaScript”到“真正驾驭 JavaScript”的蜕变,最终成长为能够独立设计、开发、优化和部署完整应用的全栈高手。