什麼是 TC39?JavaScript 標準制定流程完整解析

Written by Mark Hong
Last updated July 30, 2025
Mark Hong
此文章有較多內容由 AI 協助創作
什麼是 TC39?JavaScript 標準制定流程完整解析

你知道 ES6 的 arrow function 和 constlet 關鍵字是如何誕生的嗎?這些讓 JavaScript 變得更現代化的功能,並不是某個天才工程師靈光一閃的產物,而是經過一個嚴謹組織深思熟慮的結果。

這個組織就是 TC39,一個決定 JavaScript 未來發展方向的技術委員會。如果你曾經好奇過這些新功能是誰決定的、為什麼要加入這些特定的語法,那麼今天我們就來深入了解這個組織。

TC39 是什麼?

TC39 的全名是 Technical Committee 39(第39技術委員會),隸屬於 ECMA International 這個國際標準化組織。TC39 是一群 JavaScript 開發者、實作者、學者等人組成的團體,與社群合作維護和發展 JavaScript 的定義。

你可能會好奇為什麼叫「39」?這其實只是 ECMA International 內部的編號系統,TC39 是第39個技術委員會。雖然聽起來很隨意,但這個數字背後代表的是 JavaScript 語言標準的權威機構。

為什麼是 ECMAScript 而不是 JavaScript?

這裡有個有趣的小知識:在正式文件中,TC39 從來不使用「JavaScript」這個詞,而是稱為「ECMAScript」。原因是 Oracle 擁有「JavaScript」這個商標,為了避免法律問題,ECMA 決定使用 ECMAScript 這個詞。

在實際使用上,ECMAScript 通常指的是正式標準(ECMA-262),而 JavaScript 則是我們日常討論這個語言時使用的名稱。

誰能參與 TC39?

TC39 的組成相當有趣。委員會成員主要是「會員」,通常是瀏覽器廠商和在網路技術上投資很大的大公司,像是 Facebook、PayPal 等。這些公司會派遣「代表」參與會議,這些代表就是實際負責創建、審核或否決語言提案的人。

為了參與會議,這些公司需要先加入 ECMA International,然後派遣代表參與 TC39 的討論。這個設計確保了參與者都是真正會被決策影響的利害關係人。

有趣的是,TC39 的運作方式是基於共識的:需要大多數人同意,且沒有人強烈反對到願意動用否決權。這種決策方式雖然可能比較慢,但確保了所有重要的聲音都能被聽到。

提案如何從想法變成標準?

這是最精彩的部分。TC39 建立了一套嚴謹的流程,每個新功能都必須經過五個階段(Stage 0 到 Stage 4)才能成為正式標準。

Stage 0:Strawperson(稻草人階段)

任何對 ECMAScript 語言的想法、討論或提案,只要還沒有提交為正式提案,都被視為 strawperson(Stage 0),沒有接受標準。

這個階段基本上就是「有個想法」的階段,任何人都可以提出。

Stage 1:Proposal(提案階段)

要進入 Stage 1,TC39 必須宣布他們願意檢視、討論並貢獻這個提案。從這個階段開始,預期會有重大變更。

這個階段需要:

  • 確定一個正式的「champion」(提案負責人)
  • 描述要解決的問題
  • 提供使用範例
  • 識別可能的挑戰

Stage 2:Draft(草稿階段)

這是規格的第一個版本。到了這個階段,這個功能最終被納入標準的可能性很高。

Stage 2 的要求更加嚴格:

  • 必須有正式的語法和語意描述
  • 需要兩個實驗性實作(其中一個可以是 Babel 等轉譯器)
  • 只預期會有漸進式修改

Stage 3:Candidate(候選階段)

提案大致完成,現在需要來自實作和使用者的回饋才能進一步發展。

這個階段的要求:

  • 規格文本必須完整
  • 指定的審查者和 ECMAScript 規格編輯必須簽核
  • 至少需要兩個符合規格的實作

Stage 4:Finished(完成階段)

提案準備好被納入標準。

最終階段需要:

  • Test262 驗收測試
  • 兩個符合規格的正式實作通過測試
  • 大量的實際使用經驗
  • ECMAScript 規格編輯的最終簽核

實際例子:Optional Chaining 的發展歷程

讓我用一個我們現在經常使用的功能來說明這個流程:Optional Chaining?.)。

還記得以前我們要檢查深層物件屬性時的痛苦嗎?

// 以前我們得這樣寫
if (user && user.address && user.address.street) {
  console.log(user.address.street.name);
}

現在有了 Optional Chaining,可以優雅地寫成:

// 現在可以這樣寫
console.log(user?.address?.street?.name);

這個功能從最初的想法到成為標準,經歷了完整的 TC39 流程。Optional Chaining 在2017年6月開始作為提案,經過多次討論和修改,最終在2019年12月達到 Stage 4,成為正式標準。

最近的發展動態

在2024年10月的 TC39 會議中,Import attributes(連同 JSON 模組)達到了 Stage 4。這表示開發者很快就能在所有 JavaScript 環境中原生匯入 JSON 檔案:

import myData from "./data.json" with { type: "json" };

在2024年6月的會議中,有八個提案進展到下一個階段,包括 Iterator Sequencing 和 Joint Iteration 等功能。

如何跟上 TC39 的腳步

身為前端開發者,建議關注但不要過度焦慮。以下是實用的追蹤方式:

官方資源

實用的追蹤策略

  1. 關注 Stage 3 提案:這些功能很可能會成為標準
  2. 使用 Babel:許多 Stage 2+ 的功能都可以通過 Babel 試用
  3. 關注 MDN:新功能的瀏覽器支援狀況

對開發工作的影響

TC39 的決策直接影響日常開發。像是:

  • Async/await:讓異步程式碼更易讀
  • Optional Chaining:減少冗長的條件檢查
  • Nullish Coalescing(??:更精確的預設值處理

這些功能都是 TC39 深思熟慮的結果,不是隨意加入的語法糖。

值得期待的未來功能

目前在 Stage 2 和 Stage 3 的提案中,有幾個我特別期待的:

  1. Temporal API:全新的日期時間處理 API,要說再見給 Date 物件的各種坑了
  2. Record & Tuple:不可變的資料結構
  3. Pipeline Operator(|>:函數式程式設計愛好者的福音

我們能參與嗎?

雖然正式的 TC39 會議需要公司會員身份,但 TC39 歡迎來自 JavaScript 社群的貢獻,無論是對現有提案的回饋、改善文件、測試、實作,甚至是語言功能的想法。

你可以:

  • GitHub 上提供回饋
  • 試用新功能並分享使用經驗
  • 參與相關討論
  • 查看會議議程了解最新動向

結語

TC39 看似神秘,但其實是個相當開放的組織。他們的工作直接影響著我們每天使用的 JavaScript,而他們的決策過程也充分體現了「穩定中求進步」的理念。

由於2016年開始的年度發佈週期,新功能變得更加漸進式,也更容易採用。我們不再需要像 ES6 那樣一次消化太多新功能,而是可以循序漸進地學習和使用。

下次當你使用 constasync/await?. 的時候,可以想想 TC39 的辛勞工作。他們讓 JavaScript 持續進化,同時保持向後相容,這真的不是件容易的事。

對了,如果你對某個 JavaScript 功能特別有感覺,不妨去 TC39 的 GitHub 看看相關討論。說不定你的想法能為 JavaScript 的未來發展貢獻一份力量。

訂閱資訊儲存失敗,請稍後再試
您已成功完成訂閱 🎉 🎉

電子報

除了創作本站內容以外,我也關注科技、商業、行銷等議題,我會把一些好資訊、酷東西寫成電子報跟你分享,歡迎免費訂閱。

  • 每月最多兩封信
  • 隨時可取消訂閱