Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← Web 开发 / Web Development

JavaScript 与 TypeScript / JavaScript & TypeScript

1. JavaScript 与 TypeScript 学习路线 / JavaScript and TypeScript Learning Path

2. JavaScript 核心语义:值、对象、函数与模块 / JavaScript Core Semantics: Values, Objects, Functions, and Modules

3. TypeScript 类型系统:从结构类型到类型编程 / The TypeScript Type System from Structural Typing to Type-Level Programming

4. JavaScript 异步编程与事件循环 / Asynchronous JavaScript and the Event Loop

本页目录

JavaScript 与 TypeScript 学习路线 / JavaScript and TypeScript Learning Path ​

📅 创建时间:2026-07-28 🏷️ 标签:#JavaScript #TypeScript #LearningPath #Frontend #FullStack 📚 前置知识:基本编程经验(任意语言)


📋 本章目标 ​

  • 理解 JavaScript 与 TypeScript 在整个 Web 技术栈中的定位
  • 建立 JS/TS 学习的清晰路线图(入门 → 进阶 → 专家)
  • 理解 ECMAScript 标准、TC39 提案流程与各运行时之间的关系
  • 掌握 TypeScript 与 JavaScript 的边界:类型在编译期消失意味着什么
  • 能够为不同场景选择合适的工具链和配置策略
  • 建立"先理解运行时,再使用类型约束"的正确学习心态

第1部分:JavaScript 与 TypeScript 在整个技术栈中的位置 ​

1.1 Web 全栈中的 JS/TS ​

┌─────────────────────────────────────────────────────────────┐
│                    Web 技术栈全景图                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    浏览器层                          │   │
│  │  HTML ⟷ CSS ⟷ JavaScript ⟷ Web APIs               │   │
│  │  (DOM, Fetch, Canvas, WebSocket, Web Workers...)    │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    框架层                            │   │
│  │  React / Vue / Svelte / Solid / Angular             │   │
│  │  Next.js / Nuxt / SvelteKit / Remix                 │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    服务端层                          │   │
│  │  Node.js / Deno / Bun / Cloudflare Workers          │   │
│  │  Express / Fastify / Hono / NestJS                  │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    数据与基础设施                    │   │
│  │  PostgreSQL / MySQL / MongoDB / Redis / Kafka       │   │
│  │  Prisma / Drizzle / TypeORM                         │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  所有层次最终都运行 JavaScript(或编译到 JavaScript)       │
│  TypeScript 横跨所有层次,提供静态类型安全                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

无论你选择 React 还是 Vue,Next.js 还是 Nuxt,Express 还是 Fastify——JavaScript 和 TypeScript 是所有路径的共同基础。一个不牢固的 JS/TS 基础会在后续每一层暴露出理解偏差。

1.2 TypeScript 不是另一套运行时 ​

这是初学者最容易产生的误解,也是整个学习路线的核心前提:

┌─────────────────────────────────────────────────────────────┐
│                    TypeScript 的定位                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  你写的代码          编译后               运行时             │
│  ┌──────────┐      ┌──────────┐      ┌──────────┐         │
│  │ .ts/.tsx │ ───→ │ .js/.jsx │ ───→ │  V8 等   │         │
│  │ 带类型   │      │ 纯 JS    │      │  引擎    │         │
│  └──────────┘      └──────────┘      └──────────┘         │
│                                                             │
│  TypeScript 只在编译期存在                                   │
│  • 类型注解在运行时被完全擦除                                │
│  • 运行时没有人检查你的 interface 是否匹配                  │
│  • 外部输入(API 响应、用户输入)永远不会被类型系统验证      │
│                                                             │
│  正确心态:                                                  │
│  TypeScript = 开发期的"架构图" + "校对助手"                 │
│  不是运行时的"警察"                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

因此正确的学习顺序是:先理解 JavaScript 运行时在做什么,再用 TypeScript 表达程序约束。反过来(先学 TS 语法糖,不理解 JS 语义)会导致危险的"类型错觉"——以为标注了类型就安全了,却不理解运行时的真正行为。


第2部分:JavaScript 运行时生态全景 ​

2.1 ECMAScript、TC39 与引擎 ​

┌─────────────────────────────────────────────────────────────┐
│                    JavaScript 标准化体系                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  TC39(Ecma 技术委员会第 39 号)                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  提案阶段:                                          │   │
│  │  Stage 0 (提案) → Stage 1 (草案) → Stage 2 (候选)  │   │
│  │  → Stage 3 (候审) → Stage 4 (通过/纳入规范)         │   │
│  │                                                      │   │
│  │  每到达 Stage 4,该特性正式成为 ECMAScript 标准      │   │
│  └─────────────────────────────────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  引擎实现(各自独立,进度不同)                       │   │
│  │                                                      │   │
│  │  V8 (Chrome/Edge/Node.js/Deno)                      │   │
│  │  SpiderMonkey (Firefox)                             │   │
│  │  JavaScriptCore (Safari/Bun)                         │   │
│  │                                                      │   │
│  │  一个特性进入标准 ≠ 所有引擎都支持了                 │   │
│  │  → 查 caniuse.com / node.green 确认实际可用性       │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

理解 TC39 流程的意义:当你看一篇 2023 年的博客说"某特性不能用"时,你需要有能力去验证——该特性现在是 Stage 几?Node.js 22 LTS 是否已经支持?是否需要 polyfill?这种"标准意识"是高级 JS 开发者的标志。

2.2 运行时选择:Node.js、Deno、Bun 与浏览器 ​

┌─────────────────────────────────────────────────────────────┐
│                    四大 JS 运行时对比                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  │ 特性          │ Node.js     │ Deno        │ Bun         │
│  ├──────────────┼────────────┼────────────┼─────────────┤
│  │ 首次发布      │ 2009       │ 2020       │ 2022        │
│  │ 引擎          │ V8         │ V8         │ JavaScriptCore│
│  │ TypeScript   │ 需编译     │ 原生支持    │ 原生支持     │
│  │ 包管理        │ npm/yarn   │ URL/deno.land│ bun install │
│  │ 模块系统      │ CJS+ESM    │ ESM only   │ CJS+ESM     │
│  │ 安全模型      │ 默认无限制 │ 权限系统    │ 默认无限制   │
│  │ 最佳场景      │ 通用服务端 │ 脚本/CLI   │ 高性能工具   │
│  │ LTS 支持      │ ✅ 偶数版本│ ✅ 长期    │ ⚠️ 较新     │
│                                                             │
│  浏览器环境是另一个"运行时":                                │
│  • 有 DOM/BOM/Web APIs,但没有 fs/net 等系统调用             │
│  • 同源策略与 CORS 约束网络访问                             │
│  • 无法直接访问文件系统                                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

对于学习路径而言,Node.js 仍是理解"服务端 JS"的最佳起点——它拥有最成熟的生态、最多的生产案例和最丰富的调试工具。Deno 和 Bun 的设计理念值得了解,但它们更适合在掌握 Node.js 之后作为"对比视角"来学习。

2.3 工具链概览 ​

┌─────────────────────────────────────────────────────────────┐
│                    JS/TS 工具链全景                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  包管理器:npm / yarn / pnpm / bun                  │   │
│  │  → 管理依赖版本、lockfile、workspace monorepo       │   │
│  └─────────────────────────────────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  打包器:Webpack / Vite / esbuild / Turbopack       │   │
│  │  → 将模块图转换为浏览器可加载的 bundle              │   │
│  └─────────────────────────────────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  编译器/转译器:tsc / Babel / SWC / esbuild         │   │
│  │  → TS → JS / JSX → JS / ES2024 → ES2020            │   │
│  └─────────────────────────────────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  代码质量:ESLint / Prettier / Biome                │   │
│  │  → 静态分析、格式化、导入排序                       │   │
│  └─────────────────────────────────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  测试:Vitest / Jest / Playwright / Cypress         │   │
│  │  → 单元 / 集成 / E2E 测试                           │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

初学者不需要一次性掌握所有工具。建议顺序:先学会用 Vite 创建一个项目 → 理解 tsc 在做什么 → 引入 ESLint → 开始写测试。


第3部分:学习路线图 ​

3.1 三阶段学习路径 ​

┌─────────────────────────────────────────────────────────────┐
│                    JS/TS 学习金字塔                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                        ┌─────────┐                          │
│                        │ 专家级  │  ← 类型体操、编译器 API  │
│                        │         │    引擎内部、WASM 集成   │
│                        └─────────┘                          │
│                      ┌─────────────┐                        │
│                      │   进阶级    │  ← 泛型设计、模块架构  │
│                      │             │    性能优化、工程化    │
│                      └─────────────┘                        │
│                    ┌─────────────────┐                      │
│                    │     入门级      │  ← 基础语法、类型    │
│                    │                 │    DOM 操作、异步    │
│                    └─────────────────┘                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

阶段一:入门(1-2 个月)——建立正确的 JS 心智模型 ​

┌─────────────────────────────────────────────────────────────┐
│                    阶段一学习清单                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  □ 理解 JS 的七种基本类型 + Object                          │
│  □ 理解 `==` vs `===`、`!!`、`??`、`?.` 的精确语义         │
│  □ 掌握 let / const / var 的作用域差异                      │
│  □ 理解函数是一等公民:可以赋值、传参、返回                  │
│  □ 理解闭包:函数 + 其定义位置的词法环境                     │
│  □ 理解 this 的四种绑定规则(默认/隐式/显式/new)            │
│  □ 理解原型链:`__proto__` → `prototype` → `Object.create`  │
│  □ 掌握 Promise 链、async/await 和错误传播                   │
│  □ 理解事件循环:调用栈 → 微任务 → 宏任务                    │
│  □ 用 Node.js 写简单的 CLI 工具和 HTTP 服务                 │
│                                                             │
│  ⚠️ 阶段一红线:不要碰 React/Vue/Next.js                    │
│  在理解 JS 运行时之前使用框架 = 用脚手架掩盖知识盲区         │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

阶段二:进阶(2-4 个月)——类型系统和工程化 ​

┌─────────────────────────────────────────────────────────────┐
│                    阶段二学习清单                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  □ 理解 TS 的基础类型、联合类型、类型收窄                   │
│  □ 掌握泛型:从 `Array<T>` 到自定义泛型约束                │
│  □ 理解 `type` vs `interface` 的合并行为差异               │
│  □ 掌握条件类型、映射类型、模板字面量类型                   │
│  □ 理解模块系统:CJS vs ESM 互操作、package.json exports    │
│  □ 能配置 tsconfig.json 的严格模式选项                     │
│  □ 掌握 Promise 静态方法:all/race/allSettled/any           │
│  □ 理解 AbortController、Streams、EventTarget               │
│  □ 掌握至少一个测试框架(Vitest 推荐)                      │
│  □ 理解 CORS、Content-Type、缓存头等 HTTP 基础              │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

阶段三:专家(4-6 个月)——系统设计与底层理解 ​

┌─────────────────────────────────────────────────────────────┐
│                    阶段三学习清单                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  □ 能设计复杂的泛型约束与类型级编程                         │
│  □ 理解 V8 的隐藏类、内联缓存与去优化                       │
│  □ 掌握 Worker Threads、SharedArrayBuffer、Atomics          │
│  □ 理解 WASM 与 JS 的互操作边界                             │
│  □ 能诊断内存泄漏(heap snapshot / allocation timeline)     │
│  □ 掌握 monorepo 工具(Turborepo / Nx / pnpm workspaces)   │
│  □ 理解 Source Map、V8 Inspector 协议与调试原理             │
│  □ 能设计框架无关的库(发布到 npm、ESM+CJS 双格式)         │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14

3.2 分支选择:前端路线 vs 全栈路线 vs 工具链路线 ​

┌─────────────────────────────────────────────────────────────┐
│                    从 JS/TS 延伸的三条分支                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  JS/TS 基础完成后 ──────────┬──→ 前端路线                  │
│                             │    React / Vue / Svelte       │
│                             │    Next.js / Nuxt / SvelteKit │
│                             │    状态管理 / 路由 / 测试     │
│                             │                               │
│                             ├──→ 全栈路线                  │
│                             │    Node.js 运行时深度         │
│                             │    Express / Fastify / Hono   │
│                             │    数据库 / ORM / 中间件      │
│                             │    API 设计 / 认证 / 部署     │
│                             │                               │
│                             └──→ 工具链/基础设施路线        │
│                                  CLI 工具开发               │
│                                  Bundler / Compiler 插件    │
│                                  Monorepo / CI/CD 脚本      │
│                                  Electron / Tauri 桌面应用  │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

本知识库覆盖了前端路线和全栈路线。工具链路线更适合在工作项目中边做边学。


第4部分:必须建立的边界认知 ​

4.1 各层职责表 ​

┌─────────────────────────────────────────────────────────────┐
│                    分层的职责边界                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  │ 层次              │ 负责                       │ 不负责  │
│  ├──────────────────┼───────────────────────────┼─────────┤
│  │ JavaScript       │ 运行时的值、对象、函数    │ 编译期  │
│  │                  │ 异常、异步行为、原型链    │ 类型安全│
│  ├──────────────────┼───────────────────────────┼─────────┤
│  │ TypeScript       │ 静态类型检查、编辑器补全  │ 运行时  │
│  │                  │ 重构保障、接口契约        │ 数据验证│
│  ├──────────────────┼───────────────────────────┼─────────┤
│  │ Zod / Valibot    │ 运行时验证外部输入        │ 替代    │
│  │                  │ API 边界、配置、表单      │ TS 类型 │
│  ├──────────────────┼───────────────────────────┼─────────┤
│  │ Bundler          │ 模块打包、代码分割、      │ 改变 JS │
│  │ (Vite/Turbopack) │ 热更新、资源处理          │ 基本语义│
│  ├──────────────────┼───────────────────────────┼─────────┤
│  │ Runtime          │ 提供事件循环、文件系统、  │ 修复    │
│  │ (Node/Deno/Bun)  │ 网络、进程管理等能力      │ 业务逻辑│
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

4.2 最常见的认知错误 ​

错误 1:TypeScript 类型 = 运行时保证

typescript
// ❌ 危险的心态
async function getUser(id: number): Promise<User> {
  const res = await fetch(`/api/users/${id}`)
  return res.json() // ← 这真的是 User 类型吗?
}

// ✅ 正确的心态:编译期检查和运行时验证是两个独立层次
import { z } from 'zod'

const UserSchema = z.object({
  id: z.number(),
  name: z.string(),
  email: z.string().email(),
})

async function getUser(id: number): Promise<User> {
  const res = await fetch(`/api/users/${id}`)
  const raw = await res.json()
  return UserSchema.parse(raw) // ← 运行时真的验证了
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

错误 2:any 只是"暂时不确定"的类型

any 不是占位符——它是关闭类型检查的开关。一旦使用 any,整个表达式链的类型安全都会被污染。如果需要"暂时不确定",用 unknown + 类型收窄。

错误 3:把框架能力当成语言能力

useState 不是 JavaScript,ref 不是 JavaScript,defineProps 也不是。它们是框架在 JS 基础上构建的抽象。如果你不理解闭包,就不会真正理解 useState 为什么能工作;不理解 Proxy,就不会真正理解 Vue 的响应式。


第5部分:本模块文章导航 ​

5.1 文章结构与依赖关系 ​

┌─────────────────────────────────────────────────────────────┐
│                    JS/TS 模块文章导航                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  [本文] 00-overview — JS/TS 学习路线图              │   │
│  │  建立全局视角,理解技术栈定位                        │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  01-javascript-runtime-and-language                  │   │
│  │  深度覆盖 JS 核心语义:                               │   │
│  │  • 值与引用、类型转换、相等性比较                    │   │
│  │  • 原型链(prototype → __proto__ → class)          │   │
│  │  • 执行上下文、调用栈、作用域与闭包                  │   │
│  │  • this 绑定规则与箭头函数                           │   │
│  │  • 模块系统(CJS vs ESM)                           │   │
│  │  • Proxy/Reflect 元编程                              │   │
│  │  • Generator/Iterator/WeakMap/WeakSet               │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  02-typescript-type-system                          │   │
│  │  从基础类型到类型体操:                               │   │
│  │  • 基础类型、联合/交叉、字面量类型                   │   │
│  │  • type vs interface 深度对比                        │   │
│  │  • 泛型与约束(extends / infer / 条件类型)          │   │
│  │  • 映射类型、模板字面量类型、递归类型                │   │
│  │  • 类型收窄全策略                                     │   │
│  │  • tsconfig 关键配置与模块解析                        │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  03-async-and-event-loop                            │   │
│  │  异步编程全景:                                       │   │
│  │  • 事件循环深度图解(浏览器 vs Node.js)             │   │
│  │  • 微任务/宏任务执行顺序与可视化                     │   │
│  │  • Promise 静态方法全解与模式                        │   │
│  │  • AbortController、异步迭代、Streams                │   │
│  │  • 并发控制与常见异步陷阱                            │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

5.2 推荐阅读顺序 ​

背景推荐路线
有其他语言经验(Python/Java/C#),初次接触 JS01 → 02 → 03
会写 JS 但不理解底层01(精读原型链/this/闭包)→ 03(事件循环)→ 02
会写 TS 但只用了基础类型02(精读泛型/条件类型/类型收窄)→ 03
准备面试 / 系统化复习01 → 03 → 02(按常见面试题覆盖)

核心总结 ​

总结1:JS/TS 学习的核心原则 ​

┌─────────────────────────────────────────────────────────────┐
│                    三条核心原则                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 先理解运行时,再使用类型约束                            │
│     JavaScript 是真正执行的代码,TypeScript 是开发期工具    │
│     不理解 JS 语义 → 类型标注只是自我安慰                   │
│                                                             │
│  2. 边界处需要运行时验证                                    │
│     HTTP 响应、用户输入、文件读取、配置加载——               │
│     这些"程序边界"的数据不受类型系统保护                    │
│     → 用 Zod / Valibot / TypeBox 做运行时验证               │
│                                                             │
│  3. 框架是抽象,不是语言                                    │
│     React Hook、Vue 响应式、Next.js Server Action——         │
│     它们最终都编译为 JS 运行。理解底层才能驾驭上层          │
│                                                             │
└─────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

总结2:学习路径速查 ​

阶段核心内容检验标准
入门JS 基本类型、函数、对象、Promise、DOM能不用框架写一个 Todo 应用
进阶TS 泛型/条件类型、模块系统、测试能发布一个带完整类型的 npm 包
专家类型体操、引擎内部、性能诊断、WASM能为团队制定 JS/TS 规范

总结3:最重要的边界意识 ​

TypeScript 类型在 tsc 编译完成后就消失了。运行时的世界是纯 JavaScript。你标注的 interface User { name: string } 不会让 JSON.parse() 返回的数据多出任何检查。这种"类型世界的幻觉"是 JS/TS 开发者最常见的错误来源。建立清晰的分层认知——编译期归 TypeScript,运行时归 JavaScript + 验证库——是成为成熟开发者的关键一步。


章节测试 ​

测试1:TypeScript 的哪个说法是正确的? ​

A. TypeScript 类型在运行时被保留,可以在 console.log 中查看 B. TypeScript 类型在编译后被擦除,运行时不存在 C. TypeScript 代码可以直接在 Node.js 中运行 D. TypeScript 类型系统可以替代 Zod 等运行时验证库

测试2:以下哪个不是 JavaScript 引擎? ​

A. V8 B. SpiderMonkey C. JavaScriptCore D. Webpack

测试3:TC39 提案到达哪个阶段后正式成为 ECMAScript 标准? ​

A. Stage 2 B. Stage 3 C. Stage 4 D. Stage 5

测试4:以下关于 any 的说法哪个是正确的? ​

A. any 是"暂时不确定"的类型,可以安全使用 B. any 会关闭该表达式链的类型检查 C. any 和 unknown 完全相同 D. 使用 any 不会影响其他变量的类型推导

测试5:请简述为什么"外部输入即使标注了 TypeScript 类型,运行时也仍然需要验证"。 ​

测试6:列举 JavaScript 运行时的三大核心引擎及其对应的主要宿主环境。 ​


参考答案 ​

测试1答案 ​

答案:B。TypeScript 类型在编译后被完全擦除(type erasure),运行时是纯 JavaScript。TypeScript 代码需要先编译为 JS 才能在 Node.js 中运行(Deno 和 Bun 内置了 TS 编译,但本质上也是先编译再执行)。TypeScript 类型不能替代运行时验证。

测试2答案 ​

答案:D。Webpack 是打包工具(bundler),不是 JavaScript 引擎。V8(Chrome/Edge/Node.js/Deno)、SpiderMonkey(Firefox)、JavaScriptCore(Safari/Bun)是三大 JS 引擎。

测试3答案 ​

答案:C。TC39 提案流程:Stage 0(提案)→ Stage 1(草案)→ Stage 2(候选)→ Stage 3(候审)→ Stage 4(通过)。到达 Stage 4 后正式纳入 ECMAScript 规范。

测试4答案 ​

答案:B。any 会关闭该表达式链上所有类型检查——赋值给 any 的变量、从 any 读取的属性、传递给 any 参数的函数调用,类型安全都会被绕过。unknown 是类型安全的"不确定"替代方案。如果需要临时绕过类型检查,使用 unknown + 类型收窄。

测试5答案 ​

TypeScript 类型在编译后被擦除,运行时完全是 JavaScript。外部输入(HTTP API 响应、用户表单输入、文件内容、URL 参数等)运行时的实际数据可能不符合你定义的类型——API 可能返回不同结构、用户可能输入非法值、文件格式可能不匹配。因此必须在程序边界使用 Zod、Valibot 等运行时验证库来确保数据符合预期。

测试6答案 ​

  • V8:Chrome、Edge、Node.js、Deno
  • SpiderMonkey:Firefox
  • JavaScriptCore:Safari、Bun

相关笔记 ​

  • [[01-javascript-runtime-and-language]] — JS 核心语义深度覆盖
  • [[02-typescript-type-system]] — TS 类型系统从基础到体操
  • [[03-async-and-event-loop]] — 异步编程与事件循环全景

在 Web 大区的其他模块:

  • [[../02-react-and-nextjs/00-overview]] — React 生态学习路线
  • [[../03-vue-and-nuxt/00-overview]] — Vue 生态学习路线
  • [[../04-nodejs-and-frameworks/00-overview]] — Node.js 与后端框架

下一步学习 ​

  • [ ] 阅读 JavaScript 核心语义 — 理解 JS 运行时的真正行为
  • [ ] 写一个不含任何框架的 Todo CLI 工具,检验 JS 基础
  • [ ] 用 node -e "console.log(this)" 和浏览器 Console 对比 this 行为差异

学习状态:🟡 开始学习

最后更新于:

Pager
上一篇← Web 开发 / Web Development
下一篇2. JavaScript 核心语义:值、对象、函数与模块 / JavaScript Core Semantics: Values, Objects, Functions, and Modules

持续记录,持续成长

Copyright © Tidenflow