ECMAScript
外觀
| 編程範型 | 多重編程範式、基於原型編程、函數程式語言、指令式編程 |
|---|---|
| 設計者 | 布蘭登·艾克、Ecma國際 |
| 釋出時間 | 1997年 |
| 目前版本 | |
| 型態系統 | 弱型別、動態 |
| 網站 | ecma-international |
| 主要實作產品 | |
| SpiderMonkey、V8、ActionScript、JScript、QtScript、InScript | |
| 受影響於 | |
| Self、HyperTalk、AWK、C、Perl、Python、Java、Scheme | |
![]() | |
| 副檔名 |
.js |
|---|---|
| 網路媒體型式 |
application/ecmascript |
| 開發者 | Ecma國際 |
| 首次發布 | 1997年6月 |
| 最新版本 | 第 16 版(ECMAScript 2025) 2025年6月 |
| 格式類型 | 指令碼語言 |
| 標準 | ECMA-262 |
| 網站 | ECMA-262 |
ECMAScript是一種由Ecma國際(前身為歐洲電腦製造商協會)在標準ECMA-262中定義的手稿語言規範。這種語言在萬維網上應用廣泛,它往往被稱為JavaScript或JScript,但實際上後兩者是ECMA-262標準的實作和擴充。
歷史
[編輯]ECMAScript是由網景的布蘭登·艾克開發的一種手稿語言的標準化規範;最初命名為Mocha,後來改名為LiveScript,最後重新命名為JavaScript[1]。1995年12月,昇陽與網景聯合發表了JavaScript[2]。1996年11月,網景公司將JavaScript提交給歐洲電腦製造商協會進行標準化。ECMA-262的第一個版本於1997年6月被Ecma組織採納。ECMAScript是由ECMA-262標準化的手稿語言的名稱。
儘管JavaScript和JScript與ECMAScript相容,但包含超出ECMAScript的功能[3]。
版本
[編輯]| 版本 | 發表日期 | 與前版本的差異 |
|---|---|---|
| 1 | 1997年6月 | 首版 |
| 2 | 1998年6月 | 格式修正,以使得其形式與ISO/IEC16262國際標準一致 |
| 3 | 1999年12月 | 強大的正則表達式,更好的詞法範疇鏈處理,新的控制指令,例外處理,錯誤定義更加明確,數據輸出的格式化及其它改變 |
| 4 | 放棄 | 由於關於語言的複雜性出現分歧,第4版本被放棄,其中的部分成為了第5版本及Harmony的基礎;由ActionScript實現 |
| 5 | 2009年12月 | 新增「嚴格模式(strict mode)」,一個子集用作提供更徹底的錯誤檢查,以避免結構出錯。澄清了許多第3版本的模糊規範,並適應了與規範不一致的真實世界實現的行為。增加了部分新功能,如getters及setters,支援JSON以及在物件屬性上更完整的反射[4][5][6][7][8] |
| 5.1 | 2011年6月 | ECMAScript標5.1版形式上完全一致於國際標準ISO/IEC 16262:2011。 |
| 6 | 2015年6月 | ECMAScript 2015(ES2015),第 6 版,最早被稱作是 ECMAScript 6(ES6),添加了類和模組的語法,其他特性包括迭代器,Python風格的生成器和生成器表達式,箭頭函數,二進制數據,靜態型別陣列,集合(maps,sets 和 weak maps),promise,reflection 和 proxies。作為最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony。 |
| 7 | 2016年6月 | ECMAScript 2016(ES2016),第 7 版,多個新的概念和語言特性[9](主要包括 `Array.prototype.includes`、指數運算子 `**`) |
| 8 | 2017年6月 | ECMAScript 2017(ES2017),第 8 版,主要特性包括:`async`/`await` 函數、共用主記憶體與 `Atomics`、`Object.values()`/`Object.entries()`、字串填充方法(`padStart`/`padEnd`)等[10] |
| 9 | 2018年6月 | ECMAScript 2018(ES2018),第 9 版,主要特性包括:非同步迭代(`for-await-of`)、對象 rest/spread 屬性、正則表達式改進(`s` 標誌、命名擷取組、後行斷言等)[11] |
| 10 | 2019年6月 | ECMAScript 2019 (ES2019),第 10 版 |
| 11 | 2020年6月 | ECMAScript 2020 (ES2020),第 11 版 |
| 12 | 2021年6月 | ECMAScript 2021 (ES2021),第 12 版 |
| 13 | 2022年6月 | ECMAScript 2022 (ES2022),第 13 版 |
| 14 | 2023年6月 | ECMAScript 2023 (ES2023),第 14 版,新增陣列尋找方法、WeakMap 的 symbol 鍵支援等[12] |
| 15 | 2024年6月 | ECMAScript 2024 (ES2024),第 15 版,新增 Well-Formed Unicode Strings、Promise.withResolvers、ArrayBuffer 可調整大小等特性[13] |
| 16 | 2025年6月 | ECMAScript 2025 (ES2025),第 16 版,新增語法提案包括集合字面量、RegExp 標誌 v 等[14] |
| 17 | 預計2026年6月 | ECMAScript 2026 (ES2026),第 17 版(草案),包含若干處於 stage 4 的提案[15] |
2004年6月Ecma組織發表了ECMA-357標準,它是ECMAScript的一個擴延,也被稱為E4X(ECMAScript for XML)。
相容性
[編輯]許多應用程式支援ECMAScript,尤其是網頁瀏覽器。下列表格列出了目前版本的軟件與ECMAScript最新版本的相容性,數據基於官方 test262 測試套件[16]的通過率。
| 指令碼引擎 | 參考應用程式 | 相容性(test262 通過率)[17] | |||
|---|---|---|---|---|---|
| ES2022 (ES13) | ES2023 (ES14) | ES2024 (ES15) | ES2025 (ES16) | ||
| SpiderMonkey | Firefox 136 | 100% | 100% | 99% | 98% |
| V8 | Google Chrome 134、Microsoft Edge 134、Opera 119 | 100% | 100% | 100% | 99% |
| JavaScriptCore (Nitro) | Safari 18.4 | 100% | 100% | 99% | 97% |
| Chakra | Microsoft Edge 舊版(已停止開發) | 不再維護 | |||
測試結果可在 test262.report 即時檢視,該網站匯總了各引擎對 ECMAScript 規範官方測試套件的執行情況。
參考文獻
[編輯]- ^ Krill, Paul. JavaScript creator ponders past, future. InfoWorld. 2008-06-23 [2013-10-31]. (原始內容存檔於2014-09-20).
- ^ Press Release. Web.archive.org. [2013-10-31]. (原始內容存檔於2007-09-16).
- ^ JScript VS JavaScript. About.com. 2015-11-25 [2018-06-30]. (原始內容存檔於2015-11-26).
- ^ ECMA-262 5th Edition: ECMAScript Language Specification (PDF). [2010-04-08]. (原始內容存檔 (PDF)於2015-04-12).
- ^ Changes to JavaScript, Part 1: EcmaScript 5. [2009-07-07]. (原始內容存檔於2011-02-09).
- ^ 存档副本. [2009-07-07]. (原始內容存檔於2011-08-22).
- ^ InfoQ: ECMAScript 5正式发布. [2010-04-08]. (原始內容存檔於2010-04-10).
- ^ Javascript面面觀:核心篇《ECMA-262 Edition 5》. [2010-04-08]. (原始內容存檔於2011-02-18).
- ^ ECMAScript 2016 Language Specification. Ecma International. 2016-06 [2016-08-20]. (原始內容存檔於2016-08-20).
- ^ ECMAScript 2017 Language Specification. Ecma International. [2026-03-28].
- ^ ECMAScript 2018 Language Specification. Ecma International. [2026-03-28].
- ^ ECMAScript 2023 Language Specification. Ecma International. [2026-03-28].
- ^ ECMAScript 2024 Language Specification. Ecma International. [2026-03-28].
- ^ ECMAScript 2025 Language Specification. Ecma International. [2026-03-28].
- ^ ECMAScript 2026 Language Specification (draft). Ecma International. [2026-03-28].
- ^ test262: ECMAScript Test Suite. TC39. [2026-03-28].
- ^ test262 Report. [2026-03-28].
