【JavaScript 簡史】什麼是 ES5、ES6?網頁開發與 ECMAScript 的小故事

更新於 2022/11/10閱讀時間約 6 分鐘
在一開始學習前端開發的時候,一直遇到講師在課程內容中提到 ES5、ES6 等關鍵字,當初的我,單純認為 ES5、ES6 是講述 JavaScript 的版本,所以在使用上就沒有想太多,反正就是 JavaScript 1.0 、2.0 的感覺吧?
殊不知等到想更精進自己技術時,才發現自己對於 JavaScript 這門程式語言的特性很不了解,導致在使用時總會有不順手的地方,此時,我才意會到「了解某項技術會問世」的原因非常重要
比起聽到某一個技術很潮、很酷,而想要跟風使用,不如多花時間了解某項技術是為了解決什麼問題才出現,才能在對的時間用最快速、最有效率的辦法解決問題。
如果你目前也正在嘗試讓自己的 JavaScript 進步,那多了解 JavaScript 的歷史,會是一個非常好的起手式,那麼就讓我們開始吧!

關於 Modern JavaScript

在開始了解 JavaScript 與網頁瀏覽器的愛恨糾葛前,我們首先要先認知到一件事:現在的 JavaScript 一定跟最一開始發展起來的模樣有所落差,落差的程度不只一點點,甚至差距非常多!
我們現在常使用的 Chrome DevTools、框架,甚至常見的 library 都不是只有一個公司、一個團隊所完成的。
就像先前所說到,在軟體開發的領域中,往往不是新技術出現後,才有人去使用,或者是在某一段時間突然出現新框架、新技術,開發者們就馬上拿來用,更多時候是由遇到某個問題的開發者,為了解決當前的困擾,而創造出新的技術,再根據這個技術延伸出技術社群。
同理,當社群中有人遇到了新的問題,此時又會有相對應的新技術產生。
JavaScript 也是在這樣的狀況下誕生的,那 JavaScript 究竟是要解決什麼問題呢?這件事要從網路技術的誕生開始說起。

JavaScript 的前世今生

在 1960 年代,網路作為美軍的通訊技術誕生,一直到 1990 年代中旬,才在美國被廣泛使用在商業上,而我們現今常用的網路瀏覽器,正式在當時的時空背景下誕生的。
在 1993 年時,美國 NCSA (國家超級電腦應用中心)發表了 Mosaic ,作為最早普遍流行的圖形化瀏覽器,Mosaic 支援多種網路協定。
由於 Mosaic 的興起,在 1994 年時 Mosaic 的主要開發人員自立門戶,創立了 Netscape 公司,並後續開發了 NetScape Navigator 瀏覽器,也就是現今眾多瀏覽器的前身。
於是在這樣瀏覽器蓬勃發展的時空背景下,為了可以讓網頁有更多種呈現方式,譬如插入圖片等需求,HTML 作為標記語言在 1993 年誕生了。
然而在最初,開發人員都需要仰賴 SSR (伺服器端渲染)的方式進行網頁資訊的渲染及驗證,簡單來說就是,當使用者在網頁上修改了什麼資訊,需要直接傳送到伺服器端進行檢查。
萬一有錯字、格式錯誤怎麼辦呢?那就在從伺服器端把資料丟回給使用者囉!
這樣一來一回的傳遞方式,不僅讓伺服器負擔大,更遠遠降低使用者使用網頁的效率。
於是為了讓網頁可以在資料傳送到伺服器端前進行簡單的驗證,NetScape 更是在 1995 年時,由公司的一名職員 Brendan Eich ,在短短十天內開發出一款能在網頁上執行的語言,沒錯!這個語言就是 JavaScript 啦(當時並不是叫 JavaScript )!
現在你知道 JavaScript 是要解決什麼問題了吧?

標準化 JavaScript

但僅僅了解 JavaScript 的前世今生,其實還不足以解釋 ES5、ES6 到底什麼東西,為什麼對初學者來說這麼重要?讓我們繼續說完剛剛沒有說完的故事!
相信各位現在多多少少都聽過鼎鼎大名的 IE (Internet Explorer),但是卻沒有聽過所謂的 NetScape Navigator 吧?其實我也是在進入網頁開發領域後,才發現其實網頁瀏覽器百百種,不是只有 Google Chrome、Edge、Safari 及 IE 等。
1995 年時,不僅僅是 NetScape,微軟也加入了瀏覽器實作的戰場,微軟針對 NetScape Navigator 進行逆向工程,並根據 JavaScript 實作了一套 JScript,甚至自己額外加了一些功能,導致有些網頁在不同的瀏覽器上會有不同顯示效果,甚至根本無法顯示。
於是 JavaScript 徹底失去了標準化的規範,假設每個廠商都為了爭取市場佔有率,而開發出各式各樣獨特的語法、功能,那最後倒霉的不就是使用者自己嗎?
這樣的行為並沒有解決當前使用者使用網頁效率的問題,反而產生了更多問題。
於是在 1996 年時,NetScape 向 ECMA(歐洲計算機製造商協會)提出標準化語言標準,並於隔年實現 ECMA-262 標準,再之後,就是我們所知道的每個 ECMA 標準了:
From Wikipedia
在上圖中,ECMA 會提出一些對於 JavaScript 實作的規範,而這些規範可能會被瀏覽器實作(也就是有被這個這個瀏覽器支援),也有可能不會。
所謂的 ES5 以前,就是泛指 2011 年前所被實作的 JavaScript, 而 ES6 則是指 ECMAScript 2015,在這個版本中,一次性的規範:let、const、arrow function、Promise、Symbol、class 等概念,讓開發上更加嚴謹,而詳細的實作細節可以參考 W3C 文件。
當然後續的 ES7、ES8 的相關規範,大家也都可以在網路上找到相關的知識。
現在大家知道為什麼在職缺上,會有「需要 ES6+ JavaScript 技能」的相關技能描述了吧!
這裡眼尖的朋友們可能會想,即便 JavaScript 被標準化了,不同的版本依然有可能同時存在,那瀏覽器之間是否有向下、向上相容的狀況呢?那又是另外一個議題了。
相信透過這篇文章,大家可以更加了解何謂 ECMAScript 及 JavaScript 版本間的差異,關於網頁開發你有沒有什麼問題想要跟我分享的呢?歡迎你在下方留言與我分享。
希望今天的文章有幫助到正在閱讀的你,如果你喜歡我的文章的話,可以留下你的愛心或是收藏我的文章,也或者可以點選「贊助」,你的一杯咖啡絕對是我持續寫下去的動力!或是透過拍拍手,用你小小的行動支持我的創作!
我是Vivian,我們下次見。
關於我:
一名從英文系畢業的前端工程師,喜歡閱讀、寫東西及自我成長。
|聯絡我:vivian.enlife@gmail.com
為了追求可以窩在座位上、可以心無旁騖思考問題、座位可以亂七八糟沒關係、不需要到處哈腰點頭跑客戶,不用腳踩十公分、連妝都可以不用化的職場人生,文組少女毅然決然踏上RD的養成日常。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
在初學程式的時候,我曾經看室友開發專案到一半時,突然坐在那發呆,於是我好奇一問,室友說:「我在等程式編譯完成啊。」 還記得當初還是程式小菜雞的我,懞懂無知的說:「編譯?哈哈哈,我們 JavaScript 都不需要編譯耶,可以直接跑在瀏覽器上。」 室友一臉莫名其妙地回我:「噢,是嗎⋯⋯」
前陣子有讀者來信詢問我:「嗨!Vivian,我想要請問妳都是在哪裡學程式的呢?是實體課程嗎?」
在初學程式的時候,我曾經看室友開發專案到一半時,突然坐在那發呆,於是我好奇一問,室友說:「我在等程式編譯完成啊。」 還記得當初還是程式小菜雞的我,懞懂無知的說:「編譯?哈哈哈,我們 JavaScript 都不需要編譯耶,可以直接跑在瀏覽器上。」 室友一臉莫名其妙地回我:「噢,是嗎⋯⋯」
前陣子有讀者來信詢問我:「嗨!Vivian,我想要請問妳都是在哪裡學程式的呢?是實體課程嗎?」
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
Thumbnail
JavaScript 的條件運算子,是一種簡短且具有條件判斷功能的運算子,這個運算子提供了一種簡潔的方式來進行條件判斷,而不需要使用更冗長的if...else語句。
Thumbnail
在 JavaScript ES6 之前,JavaScript 的函式主要是使用 function 關鍵字來定義的。而箭頭函式是 JavaScript ES6 中新增的功能,它提供了一種更簡潔的方式來定義函式。
Thumbnail
在搞清楚事件委託前必須先了解什麼是事件傳遞機制(Event Propagation),也就是捕獲(capture)跟冒泡(bubble),聽起來好像很難但是我昨天看完彭彭的直播課程(17:00開始)後就懂了!我寫成文章幫助記憶,也希望能幫助到大家,然後希望我面試會被考到。
Thumbnail
執行以上程式碼,然後看到了這個結果: 為什麼「延遲0秒」的函式寫在上方,但在console印出的結果,它還是被排在第二順位? 利用AC教材提供的youtube演講連結一窺究竟: 演講提供了更多JS的細節概念,身為JS新手的我還在消化,但若針對教案提出的問題來回答,加上利用google大神查到MDN的
Thumbnail
上篇介紹的promise chain的寫法,是已經比原本好維護了沒錯,但是可讀性似乎還是有點不足,其實還可以改成用async/await的寫法,如下: E 其中,async是非同步的意思,等於是把getData()這個function定義為非同步,因此從console可以看到,test是最先被pri
Thumbnail
輸入畫面 為什麼要做驗證? 因為作為設計者,永遠不該預設使用者會乖乖照設計者的意思輸入。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
Thumbnail
JavaScript 的條件運算子,是一種簡短且具有條件判斷功能的運算子,這個運算子提供了一種簡潔的方式來進行條件判斷,而不需要使用更冗長的if...else語句。
Thumbnail
在 JavaScript ES6 之前,JavaScript 的函式主要是使用 function 關鍵字來定義的。而箭頭函式是 JavaScript ES6 中新增的功能,它提供了一種更簡潔的方式來定義函式。
Thumbnail
在搞清楚事件委託前必須先了解什麼是事件傳遞機制(Event Propagation),也就是捕獲(capture)跟冒泡(bubble),聽起來好像很難但是我昨天看完彭彭的直播課程(17:00開始)後就懂了!我寫成文章幫助記憶,也希望能幫助到大家,然後希望我面試會被考到。
Thumbnail
執行以上程式碼,然後看到了這個結果: 為什麼「延遲0秒」的函式寫在上方,但在console印出的結果,它還是被排在第二順位? 利用AC教材提供的youtube演講連結一窺究竟: 演講提供了更多JS的細節概念,身為JS新手的我還在消化,但若針對教案提出的問題來回答,加上利用google大神查到MDN的
Thumbnail
上篇介紹的promise chain的寫法,是已經比原本好維護了沒錯,但是可讀性似乎還是有點不足,其實還可以改成用async/await的寫法,如下: E 其中,async是非同步的意思,等於是把getData()這個function定義為非同步,因此從console可以看到,test是最先被pri
Thumbnail
輸入畫面 為什麼要做驗證? 因為作為設計者,永遠不該預設使用者會乖乖照設計者的意思輸入。