JavaScript 是什麼?直譯式語言與 ECMAScript 入門
JavaScript 是被使用在瀏覽器、Node.js 的程式語言,它屬於 直譯式語言,不需經過編譯就可以直接在瀏覽器上執行。它透過 ECMAScript 實作語言的標準,被世界主流瀏覽器(Chrome、Firefox、Safari、Edge)所支援。
直譯式語言是什麼意思
編譯式語言要先把原始碼轉成機器看得懂的執行檔,才能拿去跑;直譯式語言則是把原始碼交給 執行環境 邊解析邊執行。在網頁的情境裡,這個執行環境就是瀏覽器內建的 JavaScript 引擎,例如:Chrome 的 V8、Firefox 的 SpiderMonkey。
因此寫 JavaScript 的流程非常單純:存檔 → 重新整理頁面 → 看結果。連帶的代價是,很多錯誤要等到程式真的執行到那一行才會發現,所以 輸出除錯 與 try...catch 在 JavaScript 中特別重要。
ECMAScript 與 JavaScript 的關係
| 名稱 | 是什麼 | 舉例 |
|---|---|---|
| ECMAScript | 語言標準,規範語法與內建物件的行為 | ES6(ES2015)、ES2020 |
| JavaScript | 各瀏覽器依標準做出來的實作 | V8、SpiderMonkey、JavaScriptCore |
ES6 是最常被提起的分水嶺,const、let、箭頭函式、樣板字串、展開運算子都是這一版加入的。ES6 之後改成每年發布一版,所以會看到 ES2020、ES2021 這種以年份命名的版本號。
JavaScript ≠ Java
JavaScript 是由網景通訊公司(Netscape)開發,最初在它的 Navigator 2.0 產品上設計並實現,原名 LiveScript。除了句法上有一些相似之處,以及都能夠提供網頁中的可執行內容以外,JavaScript 和 Java 是完全不相干的。
| 比較項目 | JavaScript | Java |
|---|---|---|
| 執行方式 | 直譯,交給引擎執行 | 先編譯成 bytecode,再由 JVM 執行 |
| 型別 | 弱型別、動態型別 | 強型別、靜態型別 |
| 主要舞台 | 瀏覽器、Node.js | 後端服務、Android |
小提醒
面試時偶爾還是會被問到這題。記法很簡單:JavaScript 之於 Java,就像雷峰塔之於雷鋒,名字像而已。
JavaScript 可以幫我們做什麼
有寫過 HTML、CSS 的人都應該知道,它們分別掌管網頁的架構與美化,那 JavaScript 所掌管的就是 互動。
| 技術 | 負責 | 對應到人 |
|---|---|---|
| HTML | 網頁的內容與語意結構 | 骨架 |
| CSS | 網頁的樣式與呈現 | 外表 |
| JavaScript | 網頁的行為與互動 | 動作 |
具體來說,JavaScript 在網頁上常做這些事:
- 透過 DOM 讀取、修改畫面上的內容與 節點屬性。
- 監聽使用者的 事件,例如:點擊、輸入、捲動。
- 用 流程控制 判斷不同狀況該做什麼事。
- 呼叫瀏覽器提供的 Web API,例如:定時與排程、向伺服器要資料。
該從哪裡開始
如果您是第一次接觸,建議依這個順序往下讀:先知道程式碼 該寫在哪裡,接著學會 輸出 以便觀察結果,再認識 語法構成,就能開始動手改網頁了。
常見問題
JavaScript 和 Java 是同一種語言嗎?
不是。JavaScript 由網景通訊公司開發,原名 LiveScript,改名只是當年的行銷考量。兩者除了部分句法相似之外,設計目標、執行環境與型別系統都不同。
什麼是直譯式語言?
直譯式語言不需要先編譯成執行檔,程式碼交給瀏覽器內建的 JavaScript 引擎後即可逐段解析並執行。因此改完程式重新整理頁面就能看到結果。
ECMAScript 和 JavaScript 有什麼關係?
ECMAScript 是語言標準,規範語法與內建物件該怎麼運作;JavaScript 是各家瀏覽器依這份標準做出來的實作。ES6(ES2015)之後改為每年發布一個版本。
JavaScript 只能寫在瀏覽器裡嗎?
不是。Node.js 讓 JavaScript 能在伺服器端執行,也能寫指令工具;此外還有桌面應用(Electron)與行動應用(React Native)等執行環境。至於在網頁裡 可以寫在哪些位置,是另一個題目。
學 JavaScript 之前需要先會 HTML 與 CSS 嗎?
建議先學。JavaScript 在網頁裡多半透過 DOM 操作 HTML 元素與 CSS 樣式,沒有結構與樣式的概念,會很難理解自己到底在改什麼。