Logo

ECMAScript (ES) 簡介 - Part 1

Dec 20, 2025
12 min read

前言

在學習 JavaScript 之前,理解它的語言標準演進對掌握現代開發技巧非常重要。本系列文章從 ECMAScript 的早期歷史談起,逐步帶領讀者了解語言規範如何演化、核心語法如何加入、以及每個 ECMAScript 版本帶來的重要特性。

本文從最早期的 ECMAScript 1(1997 年)開始介紹,說明 ECMAScript 規範如何統一各種不同實作,建立了 JavaScript 作為網頁與伺服器端語言的基礎。隨後文章將分成三個部分安排如下:

  • Part 1:ECMAScript 早期歷史與基礎版本演進(ES1 ~ ES4) – 闡述標準化初期與前幾個版本的歷史背景與基本語法發展。

  • Part 2:ES5、ES6 的重大里程碑與 ECMAScript 2016 ~ 2017 – 聚焦於 ES5、ES6(又稱 ES2015)等重大版本所引入的核心語言特性,以及隨後幾年年度版本的關鍵更新。

  • Part 3:ECMAScript 年度版本演進(ES2018 之後) – 探討語言在 ES2018 之後的演進趨勢與新加入的現代功能。

系列文章總共分成三篇來介紹,列在下方方便大家參考:


簡介

ECMAScript (ES) 是用來定義 JavaScript 的標準化語言。從1997年以來,經歷了各版本的更新和改進,下方紀錄一下每個版本新增了哪些重要的語法和功能。


為什麼要有 ECMAScript?

ECMAScript 第一版發佈內容中,第一頁就點出 ECMAScript 推出的理念: ECMAScript: A general purpose, cross-platform programming language,希望整合當時各瀏覽器使用不同腳本語言的窘境,簡化工程師開發的時間,寫一份腳本語言就可以在各大瀏覽器上執行。

1990年代有兩個比較知名的腳本語言: JavaScript (Netscape 開發) 和 JScript (Microsoft 開發),1997年 Netscape 向歐洲標準化組織 - ECMA International 提交了 JavaScript,ECMA International 也在同年發表了第一版 ECMAScript 規範(ECMA-262)。至此,ECMAScript 陸續制定各種變數型態、函數、和其他規範,後續 JavaScript 和 JScript 也大致按照這個規範提供各方面的實作。


ES1 (ECMAScript 1) - 1997

在第一版 ECMAScript 發佈內容中提到:

‘ECMAScript syntax intentionally resembles Java syntax. ECMAScript syntax is relaxed to enable it to serve as an easy-to-use scripting language.’

ECMAScript 1 有意模仿 Java 的語法,希望能夠制定簡單容易上手的語法。這一版定義了很多 JavaScript 重要的功能和語法,為後續版本的發展奠定了基礎。下面列出一些重要的規範:

  • 基本語法
    • 詞法慣例: 空白字元、註解、標記、保留字、識別符、字面值和標點符號
    • 語法結構: 將標記組合成語法上正確的 ECMAScript 程式。
    • 自動插入分號
  • 資料類型 (Primitive value)
    • undefined
    • null
    • boolean
    • string
    • number
    • object
  • 物件(Object)和原型(Prototype)繼承 ECMAScript 是一個基於物件的語言。它不包含類別(class) 的實作,但在 ES2015 有提供 class 語法糖,但其背後仍然是透過物件和原型繼承的規範來實作。
  • 運算子 (Operator) 這一版定義了大部分常見的運算子,包含:
    • 一元運算子: delete, void, typeof, ++, --, +, -, ~, !
    • 乘法運算子: *, /, %
    • 位元運算子: >>, <<, >>>
    • 關係運算子: >, <, <=, >=
    • 其他常見運算子: ==, !=
  • 語句 (Semantics)
    • 區塊語句: {}
    • 變數宣告: var
    • 空語句: ;
    • 條件語句: if... else if... else...
    • 迭代語句: while, for, for...in
    • 其他常見語句: continue, break, return, with
  • 原生物件 (Built-in Objects) ECMAScript 定義了一系列在程式開始執行時就可用的內建物件,包含:
    • Global 物件: 全域物件,是執行程式的範圍鏈的一部分,提供了許多全域屬性和函數,例如 NaN, Infinity, eval(), parseInt(), parseFloat(), isNaN(), isFinite()
    • Object 物件
    • Function 物件: 提供了函數的相關功能,所有函數都是物件。
    • Array 物件
    • String 物件
    • Boolean 物件
    • Number 物件
    • Math 物件: 提供了一些數學常數和函數,例如 PI, abs(), sin(), cos()
    • Date 物件
  • 型別轉換 (Type Conversion)
    • toNumber
    • toString
    • toBoolean
    • toObject
  • 執行環境 (Execution Contexts)

ES2 (ECMAScript 2) - 1998

ECMAScript 2 延續了前一版的基本結構,更詳細定義語法、語義以及相關的內建物件和函數。

  • 建構子 (Constructor) ECMAScript 2 明確定義了建構子是一個函數物件,用於創建和初始化物件。每個建構子都關聯著一個原型物件,用於實現繼承和共享屬性。雖然第一版就有提到建構子的概念,但第二版提供了更正式的定義。
  • 加入未來保留字 - ECMA-262 2nd edition - FutureReservedWord abstract, do, import, short, boolean, double, instanceof, static, byte, enum, int, super, case, export, interface, switch, catch, extends, long, synchronized, char, final, native, throw, class, finally, package, throws, const, float, private, transient, debugger, goto, protected, try, default, implements, public, volatile

ES3 (ECMAScript 3) - 1999

ECMAScript 3 定義了一些常用術語,擴充了前兩版的定義,並且多了幾項新的語言特性,例如正則表達式、異常處理等等。

  • 關鍵術語 (Key Terms)
    • Type - 類型
    • Primitive Value - 原始值
    • Object - 物件
    • Constructor - 建構式
    • Prototype - 原型
    • Native Object - 原生物件
    • Built-in Object - 內建物件
    • Host Object - 宿主物件
    • 各種類型和原始值: Undefined, Null, Boolean, String, Number
  • 正則表達式 (Regular Expressions)
  • 異常處理 (Try Catch)
  • switch
  • do while

ES4 (ECMAScript 4) - 未發佈

由於 ECMAScript 4 當時訂定的目標過於龐大,試圖一次引入很多複雜的新特性,像是支援類別 (Class)、類型 (Type)、模組 (Module) 等等,實質上可能會演變成一個新的語言,因此當時許多大公司像 MicroSoft 和 Yahoo 都不支持這個版本的規範,最終在 Adobe 宣告退出支援 ECMAScript 的狀況下,可以說是確定宣告此版本的失敗。


到這裡我們理解了 ECMAScript 的最早期歷史背景和初期標準(ES1 ~ ES4)的演進。這些版本雖然較簡單,但奠定了現代 JavaScript 的核心基礎。下一篇將從 ES5 和 ES6(ES2015) 的重大更新談起,說明語言如何引入嚴格模式、模組化、箭頭函式等關鍵功能,使 JavaScript 進入現代開發階段。