JS 筆記-05 現代 JavaScript - React 和其他語法糖

更新於 發佈於 閱讀時間約 11 分鐘

現代 JavaScript 教學:從語法到實戰應用

前幾篇學習的都是 JavaScript 的基本概念, 在現代無論是打造互動式網站、開發高效能應用程式,還是要進一步學習框架如 React 或 Vue,才可以使用 JavaScript 工作。我本人不是很喜歡學 JS 甚至覺得 React 很難ㄚㄚㄚ,所以我附上一些影片,讓大家參考。

📌 目錄

  1. 陣列方法:mapforEachreduce
  2. 物件解構與語法糖
  3. 原型鏈與 class 的演進
  4. React 基礎:函數組件與 useState
  5. JavaScript 引擎簡介
  6. 商業應用案例:如何在真實專案中運用這些技術


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);
raw-image
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;

🎯 優勢:

  • 用一行就可以取得多個變數
  • 更清楚,「只」關心 namerole
  • 方便後續重構或傳遞資料(例如給函式參數)

可以理解成物件解構使用 {} 的語法嗎?

是的,物件解構的語法就是利用大括號 {},將物件中的屬性「解開」變成獨立的變數。這就像是你挑選物件裡面要用的資料,直接把它們「挖」出來,不用每次都走一趟 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 的運作:

  1. 定義類別:使用 class 關鍵字定義物件的結構與行為。
  2. 建立物件:透過 new 關鍵字,呼叫類別的 constructor 方法來初始化物件。再加上一些方法
  3. 方法繼承:子類別透過 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)

What is React?

React 是一個由 Meta(前 Facebook)開發的 JavaScript 函式庫(library),專門用來建立使用者介面(UI),尤其是針對單頁式應用(SPA)。它的核心特色是「組件化」與「聲明式程式設計」,讓你可以用更模組化、可重用的方式來建構網頁。(翻譯自 GeeksforGeeks) 這個主題很深,因為我目前還沒研究那麼多就簡單帶過~

React 的核心概念:

  • Component(元件):每個 UI 元素都是一個獨立的元件,可以重複使用。
  • JSX:React 推出的語法糖,讓你可以用類似 HTML 的方式寫 JavaScript。
  • Virtual DOM:React 會先在記憶體中建立虛擬 DOM,再比對差異後更新畫面,提升效能。
  • Hooks(鉤子):像 useStateuseEffect 等,讓你在函式元件中管理狀態與生命週期。
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 引擎如何優化效能
留言
avatar-img
留言分享你的想法!
avatar-img
越南放大鏡 X 下班資工系
36會員
88內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
2025/07/28
這篇文章循序漸進介紹 JavaScript 的非同步機制,包含同步與非同步的概念、call stack 和 event loop 的運作、callback、Promise 和 async/await 的用法與優缺點,並搭配程式碼範例及商業應用情境說明,幫助讀者瞭解非同步流程並提升開發效率。
Thumbnail
2025/07/28
這篇文章循序漸進介紹 JavaScript 的非同步機制,包含同步與非同步的概念、call stack 和 event loop 的運作、callback、Promise 和 async/await 的用法與優缺點,並搭配程式碼範例及商業應用情境說明,幫助讀者瞭解非同步流程並提升開發效率。
Thumbnail
2025/07/27
這篇文章記錄學習 JavaScript 事件冒泡、事件委託、事件傳遞和停止傳遞的筆記,包含基本概念說明、程式碼範例和實際應用案例,並以淺顯易懂的方式說明事件物件 (e) 的用途。
Thumbnail
2025/07/27
這篇文章記錄學習 JavaScript 事件冒泡、事件委託、事件傳遞和停止傳遞的筆記,包含基本概念說明、程式碼範例和實際應用案例,並以淺顯易懂的方式說明事件物件 (e) 的用途。
Thumbnail
2025/06/27
最近在思考把 Threads 貼文轉移到notion變成資料庫跟加上主題編號,但100多篇文真的很懶得複製貼上。於是我參考了以下文章,並搭配 Copilot 把細微的功能修改,約2小時內可完成。這篇文章的目的是補充原作者沒有截圖到的內容,並分享「一鍵擷取」的功能,把第一篇到最新一篇的文全部抓下來。
Thumbnail
2025/06/27
最近在思考把 Threads 貼文轉移到notion變成資料庫跟加上主題編號,但100多篇文真的很懶得複製貼上。於是我參考了以下文章,並搭配 Copilot 把細微的功能修改,約2小時內可完成。這篇文章的目的是補充原作者沒有截圖到的內容,並分享「一鍵擷取」的功能,把第一篇到最新一篇的文全部抓下來。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News