Logo

ECMAScript (ES) 簡介 - Part 2

Dec 20, 2025
10 min read

前言

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

本篇將從 ES5 接續介紹,還沒看過前一篇的話,可以先從 Part 1 開始看呦!


ES5 (ECMAScript 5) - 2009

第五版相較 ECMAScript 3 多了許多新的屬性和特性,也擴增了一些物件的方法 (Method)。

  • 嚴格模式 (Strict Mode) 可以在開頭加上 "use strict"; 來開啟這個特性。在嚴格模式下,賦值給未宣告的變數會拋出 ReferenceErrordelete 用在變數、函數的參數或名稱的時候會拋出 SyntaxError 等等。
  • 新的內建物件方法
    • Object: object.getPrototypeOf(), Object.getOwnPropertyDescriptor(), Object.getOwnPropertyNames(), Object.create() 等等。
    • Date: Date.now(), Date.prototype.toISOString(), Date.prototype.toJSON()
    • String: trim
  • 允許使用結尾逗號 (Trailing Comma)

ES6 (ECMAScript 2015) - 2015

重大更新!這一版新增了許多前端開發很常用到的關鍵字、特性以及語法糖。

  • let 和 const
  • 箭頭函式 (Arrow Function)
  • 類別 (Class): 這是一種語法糖,本質上是基於 ES5 原型繼承機制的一種更直觀的封裝。雖然 class 讓開發者更容易定義類別和繼承,但在底層仍然是使用 prototype 來運作。
  • 模組 (Modules): exportimport 關鍵字。
  • 解構賦值 (Destructuring Assignment)
    javascript
    1const person = { 2 name: 'Bob', 3 email: 'bob@email.address' 4 age: 50, 5}; 6// Destructuring Assignment 7const { name, email, age } = person;
  • Promise 物件: 用來處理非同步 (Async) 操作,比起傳統回呼函數 (Callback Function ) 更容易管理和組合。
  • Proxy 物件
  • 新的資料結構
    • Symbol
    • Map & WeakMap
    • Set & WeakSet
    • Typed Arrays: Int8Array, Uint8Array, Int16Array

ECMAScript 2016

因為從這一版開始,每年會有小更新,所以之後的版本大都以 ECMAScript<年份> 來稱呼。

  • 指數運算子 (Exponential Operator): 以更簡單的方式取代 math.pow
    javascript
    12 ** 3 // 8
  • 新增 Array.includes 方法,判斷陣列是否包含某個元素。

ECMAScript 2017

比起 ECMAScript 2016,ES2017 是一個相對重要的年度版本,最具代表性的語法就是 async / await,讓非同步程式碼更直覺。

  • async / await: 新的語法糖,讓 Promise 寫法更接近同步流程,使非同步操作更好閱讀與維護。
    javascript
    1async function getData() { 2 const res = await fetch('/api/data'); 3 return res.json(); 4}
  • 物件新方法
    • Object.values: 取得物件所有的 value。
    • Object.entries: 取得 [key, value] 陣列,常用於轉成 Map 或搭配 for...of 使用。
    • Object.getOwnPropertyDescriptors: 取得物件所有屬性的完整描述 (Descriptor),常用於複製物件。
  • 字串補位:
    • String.prototype.padStart
    • String.prototype.padEnd
  • SharedArrayBuffer & Atomics:提供多執行緒共享記憶體能力,適合 Web Worker 或較底層的運算。

在本篇中,我們探討了 ES5 與 ES6(包括 ES2016、ES2017)帶來的眾多改進,像是嚴格模式、模組化語法、Promise 以及 async/await。這些改動對現代 JavaScript 的寫法與結構帶來了深遠影響。

接下來的第三篇,我們會繼續延伸語言的年度版本演進(ES2018 以後),包括更多便利的語法糖、新增 API 與語言特性。這些更新雖然不像 ES6 那樣革命性,但在日常開發中同樣大幅提高效率。