如果有在寫 JavaScript,或多或少應該會聽過 ES 5 和 ES 6,這兩個應該是最廣為人知和討論的 JavaScript 版本,具體來說 ES 指的是 ECMAScript 的縮寫,是一套規範腳本語言的標準,而 JavaScript 是基於此一標準的「實作」,這篇文章會大約介紹 ECMAScript 標準的制定與版本命名。
ECMAScript 的規範主要由 TC39 (Technical Committee 39) 來推動,該小組隸屬於 ECMA International(專注為資訊與通信技術制定國際化標準的組織),39 僅表示其為該組織中第 39 個技術委員會,並無其他特別意義。該小組由各個廣泛不同來源的成員組成,且討論內容多為公開透明,檢視各項提案並依程序決定是否推進該項提案,若一提案最後成功進入完成階段,會變為該年 ECMAScript 標準的一部分,ECMAScript 通常每年發表一個版本,囊括該年內完成的提案內容。透過此一機制,確保 JavaScript 能有足夠的更新頻率,使其保有現代化與與時俱進。
如 JavaScript 裡對瀏覽器擴充的操作 DOM, Console... 皆不屬於 ECMAScript 的定義裡,如 DOM 是由 W3C 定義的標準發展。JavaScript 其實是一套實作了多項標準的語言,最初用於網頁與使用者互動的目的而開發。當然,隨著時間過去,現在 JavaScript 已經更廣泛的被運用在伺服器端,行動應用等更多的領域上。
官方定義上來說 ES 6 指的是 ECMAScript 第六個版標準,也稱 ES 2015,開發者社群有時候 ES 6 其實泛指的是 ES 6 以後的各個版本包含 ECMAScript 2016, 2017 ...。
這個版本會被廣泛討論,是因為它很大程度做出了許多與 ES 5 不同的重大更新,改進了可讀性,可維護性和可擴展性,讓他在更大型的專案開發中成為更可靠的使用語言。
今年是 2024,YDKJS 撰寫於 2013 年底,已經是近十年前的事了。
撰寫途中恰逢 ES 6 的版本討論與制定,所以也囊括了部分 ES 6 的內容,讓其內容的適用範圍至今都還是仍有相當程度。
時至今日,若仍有更新的瀏覽器多支援 ES 6 寫法,包括於本文撰寫時間點已確定的 ECMAScript 2024 (ES 15),主流瀏覽器的新版本皆多已支援。
若要查詢版本或語法支援性,可以使用 Can I use ... 這個網站,以 ES 15 中的新語法 Promise.withResolvers 為例,便能看到當今各大瀏覽器 / 平台的支援性,在使用面向使用者的應用程式會更需要考慮語法的被採用度。
https://caniuse.com/?search=Promise.withResolvers
ES 6 推出的特性包含但不限於變數宣告詞 let 和 const,箭頭函數,樣板字面量(Template Literals,以``作為字串的宣告並能穿插變數),類別(Class),Module,Promise,展開運算符(...關鍵字,如用於攤平陣列對象),解構賦值(let [a,b,c] = arr,從回傳的陣列或物件直接指定對應變數接值),Set,Map ...等等,還有其他新的方法或運算符。
ES 5 被視為第一個成熟的版本,而 ES 6 往往被視為語言的一個飛躍,因為這版本新增的特性與關鍵字,讓許多現代的實作得以實現。這邊不會用這篇的內容來逐一解釋,後面若有遇到會再視情況展開。