iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 1
2
Modern Web

JavaScript 之旅系列 第 1

JavaScript 之旅 (1):介紹 ECMA、ECMAScript、JavaScript 和 TC39

你很常聽到 ES6、ES7、ES2017 等這些名稱嗎?有聽過 ECMA 和 TC39 嗎?ECMAScript 和 JavaScript 又是什麼?規範要去哪裡看?下面會各別介紹。

本文同步發表於 Titangene Blog:JavaScript 之旅 (1):介紹 ECMA、ECMAScript、JavaScript 和 TC39

「JavaScript 之旅」系列文章發文於:

ECMA

ECMA 是 European Computer Manufacturers Association (歐洲電腦製造商協會) 的簡稱,協會在 1961 年正式成立,是資訊和通訊系統的標準組織。

後來為了因應國際化,在 1994 年將名稱改為 Ecma International (Ecma 國際)。

Ecma 國際負責的標準包括:

想知道 Ecma 國際負責哪些標準可參閱:Ecma Standards - list

更多有關 ECMA 的歷史可參閱 History of Ecma

ECMAScript & ECMA-262

ECMAScript 簡稱 ES,是一種通用的程式語言,由 Ecma 國際在 ECMA-262 進行標準化。ECMA-262 的第一版在 1997 年由 Ecma General Assembly 出版的。

ECMAScript 是由 Netscape 的 Brendan Eich 發明的,最早出現在 Netscape 的 Navigator 2.0 瀏覽器中。從 IE 3.0 開始,很多瀏覽器開始使用 ECMAScript。

ECMAScript 是 JavaScript 的標準,目的是讓不同瀏覽器之間能根據 spec 來實作。當 ECMAScript 發布第三版 (即 ES3) 之後,成為當時所有瀏覽器支援的程式語言。

以前只能在瀏覽器中使用 ECMAScript,後來也能在 Node.js 寫 server 應用和 service。

ECMAScript & JavaScript

JavaScript 和 ECMAScript 都是程式語言,但不是一樣的東西。JavaScript 通常縮寫為 JS,是一種符合 ECMAScript spec 的程式語言。

ECMA-262 是 ECMAScript 的規範,而 JavaScript 只是其中一種實作和擴充的程式語言 (雖然 JavaScript 相容於 ECMAScript,但 JavaScript 還提供 ECMAScript 未定義的特性)。

而我們常聽到的 ES6,代表的是 ECMA-262 第 6 版 (ECMA-262 6th Edition)。

從 ES7 (ES2016) 開始,ECMAScript 會在每年釋出新版本,裡面包含已完成的新特性,而瀏覽器就會根據新特性來完成實作,開發者就能開始使用這些新特性。

TC39

Ecma 標準是由各種技術委員會管理的,而 TC39 就是其中一個 TC,是 Technical Committee (技術委員會) 的縮寫,TC 會處理特定的領域或主題。

TC39 主要負責將通用、跨平台與 vendor 無關的程式語言 ECMAScript 標準化,包括語言的 syntax、semantics 和 library 以及支援該語言的補充技術。

詳情可參閱 TC39 - ECMAScript

其實還有其他的 TC,詳情可參閱 Ecma Technical Committees and Task Groups

TC39 的提案流程

Ecma TC39 委員會負責發展 ECMAScript 程式語言並撰寫 spec,要對 spec 進行修改的階段如下:

  • stage 0 (Strawperson):沒有作為正式提案提交的任何討論、想法,或是修改或新增提案都是此階段
  • stage 1 (Proposal):補充理由、描述解決方案、用法的說明範例、提出潛在的 challenges、討論關鍵演算法、abstractions 和 semantics,在這個階段就會有 polyfill 或 demo
  • stage 2 (Draft):用 spec 的方式來精確描述 syntax 和 semantics,此階段會有實驗性的實作
  • stage 3 (Candidate):已完成 spec 的內容,需要大量使用者的使用和反饋才能進入 stage 4,但實作已經符合 spec 了
  • stage 4 (Finished):已準備將提案加入正式的 ECMAScript 標準中,但需兩個相容的實作 (瀏覽器或 Node.js 等環境) 通過驗收測試。此階段的實作已穩定

所以 stage 0 是想法階段,而 stage 1 至 3 都是在進行審查和討論,從 stage 2 開始會有接近正式 spec 的內容,最後的 stage 4 才是正式將提案納入 spec 中。

有些提案還沒到 stage 4 就能在瀏覽器使用了,而且也有對應的 polyfill 可以使用。

TC39 的提案流程詳情可參閱 The TC39 Process

ECMAScript 提案

各提案在哪個 stage,或是被放棄、撤回或拒絕的提案都可在 tc39/proposals: Tracking ECMAScript Proposals 這裡找到。

若只想查看已完成的提案,可直接看 Finished Proposals 這份文件,這裡有從 ES2016 開始到最新的所有 Finished Proposals。

ECMAScript Spec

若要看 ECMAScript spec 主要有兩個地方:

我個人常看的是草案那份,若想看某個功能的定義,也可以看看在各版本的 spec 中是如何定義的。

但 ECMA-262 的文件有一個缺點:沒有像 HTML StandardCSS 2.2 Spec 一樣提供分頁功能啊...,每次開 spec 都會卡一下 (找一個換電腦的理由 XD)。為了解決這個問題,我另外找了 https://read262.netlify.app/ 這個網頁,它把草案那份的內容即時更新成分頁版的 spec,而且還提供目錄和好用的搜尋功能!

瀏覽器 & Node.js 的支援程度

可參閱 ECMAScript 6 compatibility tableNode.js ES2015/ES6, ES2016 and ES2017 support 這兩個頁面的表格,列出各版本對各特性支援的程度:

資料來源


下一篇
JavaScript 之旅 (2):Array.prototype.includes()
系列文
JavaScript 之旅5
0
CathyShen
iT邦新手 5 級 ‧ 2020-09-16 11:24:05

鮮蝦挺!
恭喜人體自走 spec 機 Titan 正式開賽~ ✧*。٩(ˊᗜˋ*)و✧*。

Titangene iT邦新手 5 級 ‧ 2020-09-16 22:16:22 檢舉

/images/emoticon/emoticon08.gif

0
Chris
iT邦新手 5 級 ‧ 2020-09-16 11:24:20

好想規範系列!!!

Titangene iT邦新手 5 級 ‧ 2020-09-16 22:18:09 檢舉

/images/emoticon/emoticon12.gif

0
fillano
iT邦超人 1 級 ‧ 2020-09-17 13:49:39

我記得提案流程好像是ES6開始的?kangax的相容性表裡面直接就有測試程式(c icon),很方便快速入手。

看更多先前的回應...收起先前的回應...
Titangene iT邦新手 5 級 ‧ 2020-09-18 00:06:21 檢舉

但我是看 spec 的 Introduction 寫的這段說的:「ECMAScript 2016 was the first ECMAScript edition released under Ecma TC39's new yearly release cadence and open development process.」

感謝補充!

fillano iT邦超人 1 級 ‧ 2020-09-18 06:54:37 檢舉

我記憶也不太清楚,有些時間了。前一陣子還看到Allen Wirfs-Brock在twitter抱怨提案太多XD

Titangene iT邦新手 5 級 ‧ 2020-09-18 08:29:33 檢舉

它抱怨的原因是什麼?

fillano iT邦超人 1 級 ‧ 2020-09-18 09:24:15 檢舉

印象中很多提案沒有考慮這個語言consistency,或是實際的需求之類。不過回頭發現有點難google到XD

Titangene iT邦新手 5 級 ‧ 2020-09-18 09:58:09 檢舉

沒關係 /images/emoticon/emoticon37.gif

0
tsuifei
iT邦新手 5 級 ‧ 2020-09-17 20:21:12

這篇好精彩,好詳細!終於把這些單位和資料的來龍去脈搞懂了!
即使忘記了也知道要回來看這篇XD

Titangene iT邦新手 5 級 ‧ 2020-09-18 00:07:11 檢舉

/images/emoticon/emoticon08.gif

0
RURU Tseng
iT邦新手 5 級 ‧ 2020-09-18 23:38:26

講解的超詳細,推推!

Titangene iT邦新手 5 級 ‧ 2020-09-18 23:50:17 檢舉

/images/emoticon/emoticon42.gif

0
ytyubox
iT邦新手 5 級 ‧ 2020-09-19 12:52:16

好多人推薦,想必是篇好文章~,支持一下!

Titangene iT邦新手 5 級 ‧ 2020-09-19 16:33:23 檢舉

/images/emoticon/emoticon41.gif

0
huli
iT邦新手 5 級 ‧ 2020-09-20 08:58:00

推推,期待這個系列

Titangene iT邦新手 5 級 ‧ 2020-09-20 13:40:45 檢舉

/images/emoticon/emoticon07.gif

我要留言

立即登入留言