一个新 JS 特性要经历什么
约 831 字大约 3 分钟
2026-02-05
专业名称
TC39
TC39 = Technical Committee 39
ECMAScript(也就是 JS 语言本身)的标准制定委员会
成员是谁?
- 浏览器厂商(Chrome / Firefox / Safari)
- 大厂(微软、Google、Apple、Meta…)
- 语言专家、社区代表
一句话:JS 能不能加新语法,TC39 说了算
提案
任何人 / 团队:
- 都可以向 TC39 提交一个“新 JS 特性想法”
- 比如:装饰器、管道操作符、Optional Chaining
但不是“我提了就能进标准”,它要闯关。
Stage
TC39 给所有新特性设计了 Stage 0 → 4 的晋级制度,就像游戏关卡。
🟠 Stage 0:想法阶段(脑洞)
- 只是一个 idea
- 可能只有 README
- 随时可能被喷死
例子:“我觉得 JS 应该支持 XXX”,绝对不能用在生产环境
🟡 Stage 1:提案阶段(认真讨论)
- 有明确动机
- 有大致语法
- 委员会觉得:值得研究
这一步开始:
Babel / TS 可能“实验性支持”
但语法可能会大改
但语法可能会大改
🟢 Stage 2:草案阶段(形态基本稳定)
- 语法大体定型
- 但细节仍可能变
- 规范开始写得比较完整
TypeScript 特别喜欢在 Stage 2 就支持,TS “领先标准”,很多就发生在这里。
🔵 Stage 3:候选阶段(准标准)
这是分水岭,非常重要。
Stage 3 意味着:
- 语义基本锁死
- 浏览器可以放心实现
- Babel / TS 支持基本靠谱
99% 会进标准,现在很多你“觉得已经是 JS 的东西”,其实是 Stage 3。
🟣 Stage 4:正式标准
- 至少两个主流 JS 引擎实现
- 测试通过
- 写进 ECMAScript 规范
这时它才是“真正的 JS”
完整流程
- 有人提出想法(Stage 0)
- TC39 觉得有戏(Stage 1)
- 语法逐渐稳定(Stage 2)
- 各大引擎开始实现(Stage 3)
- 一年一次,被打包进 ES 版本(Stage 4)
这整个过程:
- 快的:2~3 年
- 慢的:5~10 年
- 有的:永远死在路上
ES 一年一版
现在的命名规则是:
- ES2015(ES6)
- ES2016
- ES2017
- …
- ES2024
- ES2025
不再用 ES7 / ES8 / ES16 这种说法了
所以:
- 现在不是 ES16 / ES17
- 而是 ES2024 / ES2025
一年一版指的是:把当年“已 Stage 4 的特性”打包发布
不是说:“一年语言就大变一次”
TS “提前用未来 JS”
TS 和 JS 的关系很微妙:
TypeScript 干了三件事:
- 提前实现 Stage 2/3 的语法
- 提供类型系统(JS 永远不会有)
- 在编译期“擦掉”自己
所以你会看到:
- 标准 JS:还在讨论
- TS:已经能用了
装饰器就是典型:
- ES 装饰器:多年反复修改
- TS:先给你一套“能用的”
TypeScript 的能力边界在“编译期”。
它只能实现那些不改变 JavaScript 运行时语义、能在编译后被完全擦掉或安全降级的语法和约束;
类型系统、装饰器这种“看起来像元编程”的东西,本质只是在你写代码时提供约束和提示。
真正的运行期元编程(比如 Proxy、反射、动态行为拦截)完全属于 JavaScript 本身,TS 既不能也不会介入。换句话说:TS 负责让代码“写得对”,JS 负责让代码“跑得动”。