現代 JavaScript 教學:從語法到實戰應用
前幾篇學習的都是 JavaScript 的基本概念, 在現代無論是打造互動式網站、開發高效能應用程式,還是要進一步學習框架如 React 或 Vue,才可以使用 JavaScript 工作。我本人不是很喜歡學 JS 甚至覺得 React 很難ㄚㄚㄚ,所以我附上一些影片,讓大家參考。
📌 目錄
- 陣列方法:
map
、forEach
、reduce
- 物件解構與語法糖
- 原型鏈與
class
的演進 - React 基礎:函數組件與
useState
- JavaScript 引擎簡介
- 商業應用案例:如何在真實專案中運用這些技術
1️⃣ 陣列方法:map、forEach、reduce
帥哥短影音介紹 Maps Are A Game Changer For JavaScript三個方法是現代 JS 中不可或缺的資料處理工具。沒有這些語法,開發者可能需要撰寫更多冗長的迴圈與條件判斷,導致程式碼更難維護且容易出錯;而有了這些語法,則能以更簡潔與直觀的方式處理資料,提升開發效率與程式碼可讀性。具體來說,map
提供了方便的方式來轉換陣列資料,forEach
適合執行副作用操作如日誌記錄,而 reduce
則能有效地將陣列聚合成單一值,解決了手動累加與合併的繁瑣過程。
🚩 初學者常犯錯誤對比:
- 錯誤範例:使用傳統迴圈手動累加,容易出現邏輯錯誤。
const prices = [100, 200, 300];
let total = 0;
for (let i = 0; i < prices.length; i++) {
total += prices[i]; // 忘記初始化 total 或漏掉索引,就會一直加
}
- 正確範例:使用
reduce
簡化累加邏輯。
const prices = [100, 200, 300];
const total = prices.reduce((sum, p) => sum + p, 0);

const prices = [100, 200, 300];
// map:把每個都加上稅
const taxed = prices.map(p => p * 1.05);
// forEach:列印每個價格
prices.forEach(p => console.log(`Price: ${p}`));
// reduce:計算總和
const total = prices.reduce((sum, p) => sum + p, 0);
📊 圖解建議:用流程圖展示 reduce
的累加過程,或用對比圖呈現 map
vs forEach
的回傳差異。
2️⃣ 物件解構:讓程式碼更簡潔
🧾 Before:沒有使用物件解構
const user = {
name: '璧綺',
role: 'Frontend Developer',
skills: ['JS', 'React', 'Accessibility']
};
const name = user.name;
const role = user.role;
問題:
- 必須一一列出屬性並重複
user.
- 當屬性多時會增加維護負擔
- 難以一次看到你到底用到哪些資料欄位
✨ After:使用物件解構
const user = {
name: '璧綺',
role: 'Frontend Developer',
skills: ['JS', 'React', 'Accessibility']
};
const { name, role } = user;
🎯 優勢:
- 用一行就可以取得多個變數
- 更清楚,「只」關心
name
跟role
- 方便後續重構或傳遞資料(例如給函式參數)
可以理解成物件解構使用 {} 的語法嗎?
是的,物件解構的語法就是利用大括號 {}
,將物件中的屬性「解開」變成獨立的變數。這就像是你挑選物件裡面要用的資料,直接把它們「挖」出來,不用每次都走一趟 obj.property
的長路。(這部分如果有錯誤,請不吝指正)
3️⃣ 原型鏈 prototype chain 與 class
:理解 JS 的物件導向
Learn JavaScript CLASSES in 6 minutes!
在 JavaScript 中,class
是一種語法糖,讓開發者能以更直觀的方式定義物件的結構與行為。它的底層仍然基於原型鏈運作,但提供了更清晰的語法來實現物件導向程式設計。
易懂範例:動物與行為
以下是一個簡單的範例,展示如何使用 class
定義物件:
// 定義一個名為 Animal 的類別
class Animal {
constructor(name) { // 建構子,用來初始化物件屬性
this.name = name;
}
speak() { // 定義一個方法,讓物件可以執行行為
console.log(`${this.name} makes a noise.`);
}
}
// 定義一個名為 Dog 的子類別,繼承自 Animal
class Dog extends Animal {
speak() { // 覆寫父類別的 speak 方法
console.log(`${this.name} barks.`);
}
}
// 建立一個 Dog 的實例
const dog = new Dog('Rex');
dog.speak(); // 輸出:Rex barks.
沒有 Class 時的時候... 要一個一個定義方法
在沒有 class
的情況下,我們可以使用函數與原型鏈來實現相同的功能:
// 定義一個建構函數
function Animal(name) {
this.name = name;
}
// 在原型上定義方法
Animal.prototype.speak = function() {
console.log(`${this.name} makes a noise.`);
};
// 定義一個子類別的建構函數
function Dog(name) {
Animal.call(this, name); // 繼承父類別的屬性
}
// 繼承父類別的原型方法
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
// 覆寫父類別的方法
Dog.prototype.speak = function() {
console.log(`${this.name} barks.`);
};
// 建立一個 Dog 的實例
const dog = new Dog('Rex');
dog.speak(); // 輸出:Rex barks.
圖解:Class 的運作流程
以下是一個視覺化圖解,幫助理解 class
的運作:
- 定義類別:使用
class
關鍵字定義物件的結構與行為。 - 建立物件:透過
new
關鍵字,呼叫類別的constructor
方法來初始化物件。再加上一些方法 - 方法繼承:子類別透過
extends
關鍵字繼承父類別的屬性與方法。
[Animal Class] --> [Dog Class (extends Animal)] --> [dog Instance]
4️⃣ React 基礎:函數組件與 useState
Every React Concept Explained in 12 Minutes
How React ACTUALLY works (DEEP DIVE 2023)
React 是一個由 Meta(前 Facebook)開發的 JavaScript 函式庫(library),專門用來建立使用者介面(UI),尤其是針對單頁式應用(SPA)。它的核心特色是「組件化」與「聲明式程式設計」,讓你可以用更模組化、可重用的方式來建構網頁。(翻譯自 GeeksforGeeks) 這個主題很深,因為我目前還沒研究那麼多就簡單帶過~
React 的核心概念:
- Component(元件):每個 UI 元素都是一個獨立的元件,可以重複使用。
- JSX:React 推出的語法糖,讓你可以用類似 HTML 的方式寫 JavaScript。
- Virtual DOM:React 會先在記憶體中建立虛擬 DOM,再比對差異後更新畫面,提升效能。
- Hooks(鉤子):像
useState
、useEffect
等,讓你在函式元件中管理狀態與生命週期。
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
點擊次數:{count}
</button>
);
}
📈 商業應用:用於互動式 UI,如購物車數量、表單輸入等。
📊 圖解建議:用狀態流程圖呈現 useState
的更新機制。
5️⃣ JavaScript 引擎簡介
JS 引擎(如 V8)負責:
- 編譯 JS 成機器碼
- 管理記憶體與垃圾回收
- 執行事件迴圈與非同步任務
📊 圖解建議:展示 JS 執行流程:解析 → 編譯 → 執行 → 回收。
6️⃣ 商業應用案例:整合技術打造互動式產品頁
以下解釋由 Copilot 提供
假設你正在開發一個產品頁面:
- 用
map
渲染商品列表 - 用
useState
管理購物車狀態 - 用物件解構提取 API 回傳資料
- 用
class
建立商品模型 - 理解 JS 引擎如何優化效能