Skip to content

TC39(ECMAScript标准制定委员会)负责推进JavaScript(ECMAScript)的语言演进,其提案采用五阶段流程(Stage 0–4)。每个阶段代表提案的成熟度,需经委员会审查和社区反馈。以下是各阶段的核心意义及典型案例:


📌 Stage 0: Strawman(草案阶段)

  • 目标:正式提交想法,开启初步讨论。
  • 要求:需由TC39成员或注册贡献者提交,描述问题并给出初步解决方案。
  • 产出:无规范文本,仅需说明提案动机。
  • 典型案例
    • 历史提案如Observable(异步数据流处理)始于此阶段。

⚙️ Stage 1: Proposal(提案阶段)

  • 目标:确定提案可行性,明确解决方案。
  • 要求
    • 提供详细问题描述、解决方案及示例。
    • 列出潜在挑战(如语义冲突、性能影响)。
    • 定义需实现的API或语法。
  • 产出:初步规范草案,包含API定义或语法范例。
  • 典型案例
    • Type Annotations(类型注解):旨在让原生JS支持TS风格的类型声明,处于Stage 1(截至2023年)。
    • Resizable ArrayBuffer(可伸缩二进制缓冲区)曾在此阶段。

📐 Stage 2: Draft(草案定型阶段)

  • 目标:完成规范的正式描述,锁定核心设计。
  • 要求
  • 产出:可纳入标准文档的规范文本。
  • 典型案例
    • Array.prototype.groupBy:数组分组方法(如按奇偶性分类)。
    • findLast:从数组末尾反向查找元素。

🧪 Stage 3: Candidate(候选阶段)

  • 目标:获得最终设计批准,等待实践验证。
  • 要求
    • 规范文本完全定稿,仅允许修正边缘案例。
    • 至少一种浏览器或引擎(如Chrome、SpiderMonkey)实现该功能。
    • 收集实现过程中的反馈。
  • 产出:可被JavaScript引擎集成的稳定规范。
  • 典型案例
    • Error Cause(阿里巴巴提案):为Error构造函数添加cause属性,支持链式错误追踪(2022年进入Stage 3)。
    • Array.prototype.at:支持负索引查询数组(如arr.at(-1))。

Stage 4: Finished(完成阶段)

  • 目标:正式纳入ECMAScript标准。
  • 要求
    • 通过两种以上主流引擎(V8、SpiderMonkey、JavaScriptCore等)的兼容性测试。
    • 所有测试用例通过验证。
    • 由TC39主席签署并入标准。
  • 产出:成为当年发布的ECMAScript官方标准的一部分。
  • 典型案例
    • Promise(异步编程核心)。
    • Async/Await(基于Promise的语法糖)。
    • Array.prototype.includes(数组包含检测)。

当前代表提案示例(截至2025年)

阶段提案名称关键能力状态来源
Stage 1Type Annotations原生JS支持TS风格类型注解(运行时忽略)
Stage 2Array Group按回调函数分组数组元素(groupBy
Stage 3Error Cause链式错误堆栈追踪(new Error("msg", {cause})
Stage 4Array.prototype.at支持负索引查询(arr.at(-1)

💎 流程意义与开发者影响

  • 渐进严谨:从概念(Stage 0)到生产可用(Stage 4),层层过滤高风险设计。
  • 生态协同:Stage 3+的提案可安全用于Babel等工具,提前验证稳定性(如@babel/plugin-proposal-error-cause)。
  • 标准透明:所有提案公开托管于TC39 GitHub,开发者可追踪进度并参与讨论。

💡 实践建议:生产项目优先采用Stage 4特性;实验性功能(Stage 2–3)需结合转译器并评估兼容性。