詳解JavaScript與ECMAScript的區別

  • 2019 年 12 月 31 日
  • 筆記

譯者按: 簡單的說,ECMAScript 是標準,而 JavaScript 是實現。

本文採用意譯,版權歸原作者所有

對於新手來說,大概會搞不清楚 JavaScript 與 ECMAScript 之間的關係與區別,這篇部落格將詳細介紹 JavaScript 與 ECMAScript 相關術語,幫助大家搞清楚狀況…

Ecma International

一個制定技術標準的組織

什麼是標準呢?我們可以想一想鍵盤。絕大多數的鍵盤的字母順序是一樣的,並且都有空格、回車,方向和數字等鍵。這是因為大多數的鍵盤製造商都遵守了[ QWERTY 標準。

ECMA-262

由 Ecma International 發布。它包含了腳本語言的標準。

ECMA-262 類似於 QWERTY,後者標準化了鍵盤布局,而前者標準化了腳本語言 ECMAScript。

不妨把 ECMA-262 看做 ECMAScript 的編號。

ECMAScript

由 ECMA-262 制定的標準,用於實現通用的腳本語言。

ECMAScript 提供了腳本語言需要遵守的規則、細節和規範。下面的圖片摘錄了ECMAScript 2017 Language Specification,這個文檔有 900 頁…

JavaScript

通用腳本程式語言,它遵循了 ECMAScript 標準

換句話說,JavaScript 是 ECMAScript 的方言。

通過閱讀ECMAScript 標準,你可以學會怎樣實現一個腳本語言;而通過閱讀JavaScript 文檔,你可以學會怎樣使用腳本語言編程。

JavaScrit 基本上實現了 ECMA-262 的標準,但是也有一些不同。Mozilla 列出了 JavaScript 的非 ECMAScript 特性

JavaScript 引擎

理解並執行 JavaScript 程式碼的解釋器

瀏覽器中會有 JavaScript 引擎,比如 Chrome 有 V8,Firefox 有 SpiderMonkey,Edge 有 Chakra。JavaScript 引擎處理 JavaScript 程式碼,類似於人對語言的處理。

人對語言的處理存在差異,那麼就不難理解瀏覽器處理 JavaScript 的差異了。

瀏覽器性能差異

假設兩個人都可以理解」jump」指令,其中 1 個人也許會反應快一些,因為他可以更快的理解和處理」jump」。同樣的,兩個瀏覽器都可以理解 JavaScript 程式碼,但是其中 1 個瀏覽器會快一些,因為它的 JavaScript 引擎的實現方式更加高效。

瀏覽器支援差異

我們都知道,不同人對同一種語言的了解和使用是存在差異的。比如,許多人都使用英語,有些人知道的單詞、短語和語法,其他人未必都知道。瀏覽器也是一樣的。儘管瀏覽器的 JavaScript 引擎都能理解 JavaScript,但是有些瀏覽器的理解能力更強,它們對 JavaScript 的支援是不一樣的。

下面的表格來自 ECMAScript維基百科,它顯示了各種瀏覽器對 ECMAScript 的支援情況:

要知道,ECMAScript 只是一個標準,它告訴我們腳本語言應該是怎樣的。但是,發布一個新版本的 ECMAScript 時,並不意味著所有 JavaScript 引擎都會馬上擁有新的特性。這取決於 JavaScript 引擎開發者是否支援最新特性。

因此,許多開發者都會這樣問:「這個瀏覽器支援哪個版本的 ECMAScript?」;「這個瀏覽器支援哪些 ECMAScript 特性?」。他們還想知道 Chrome, Firefox 以及 Edge 瀏覽器是否更新了 JavaScript 引擎,來確定這些瀏覽器是否支援最新的 ECMAScript。 ECMAScript compatibility table可以很好地回答這個問題。

當新的 ECMAScript 發布之後,JavaScript 沒有一次性支援所有新特性,則他們會逐步支援新特性,我們可以通過 Firefox 的 Changelog 看得到:

ECMAScript 6

ECMA-262 的第 6 個版本

同義詞: ES6, ES2015, and ECMAScript 2015

這個版本的 ECMAScript 將它的名字從 ES6 改為了 ES2015,因為 Ecma International 決定每年發布 ECMAScript,並根據發布的年份進行命名。簡單地說,ES6 與 ES2015 指定是同一個 ECMAScript 版本。

先有雞還是先有蛋

JavaScript 是 1996 年創造的,它在 1997 年提交給 Ecma International,因此才有了 ECMAScript。同時,由於 JavaScript 遵循 ECMAScript 標準,因此 JavaScript 是 ECMAScript 的實例。

因此:ECMAScript 是基於 JavaScript 的,而 JavaScript 也是基於 ECMAScript 的,兩者密不可分。

版權聲明

轉載時請註明作者 Fundebug以及本文地址: https://blog.fundebug.com/2017/11/22/details-about-javascript-and-ecmascript/