Vibe Coder
JavaScript 基礎:讓靜態畫面變成互動應用
JavaScript 負責網頁的互動行為,包含操作 DOM、監聽事件、呼叫 API 三大工作。前端最常見的錯誤幾乎都出在這裡,懂了 JavaScript 就能看懂 Console 的錯誤訊息,知道問題出在哪一行、該怎麼跟 AI 描述。
JavaScript 基礎:讓靜態畫面變成互動應用
按鈕沒反應、資料沒更新、Console 一堆紅字,前端最多的 bug 都出在 JavaScript,不懂就完全無法排查。
React 的 useState、useEffect、事件處理,全部建立在 JavaScript 的基礎上,這篇先把操作 DOM、事件監聽、呼叫 API 這三件事練熟,之後看 React 才不會覺得是魔法。
你將學到什麼
JS 在前端做什麼
操作 DOM、監聽事件、呼叫 API、更新畫面,四件事說完前端邏輯。
操作 DOM 的常用寫法
取得元素、讀寫內容、加減 class,幾行就能記熟。
事件監聽
點擊、輸入、送出,回應使用者操作的起點。
非同步與 API 呼叫
async、await、fetch,前後端串接的核心語法。
JS 在前端做什麼
| 功能 | 說明 | 例子 |
|---|---|---|
| 操作 DOM | 讀取和修改頁面上的元素 | 點擊後改變文字、隱藏或顯示元素 |
| 事件監聽 | 回應使用者的點擊、輸入、捲動 | 按下按鈕送出表單 |
| 呼叫 API | 用 fetch 向後端請求資料 | 查詢天氣資料、送出訂單 |
| 更新畫面 | 根據資料動態渲染內容 | 搜尋結果即時更新 |
操作 DOM
// 取得元素
const btn = document.querySelector('.submit-btn')
const title = document.getElementById('main-title')
// 讀取和修改內容
const text = title.textContent // 讀取文字
title.textContent = '新的標題' // 修改文字
title.innerHTML = '<strong>粗體</strong>' // 修改 HTML
// 修改樣式
title.style.color = '#c04040'
title.style.fontSize = '24px'
// 加減 class
title.classList.add('highlight')
title.classList.remove('hidden')
title.classList.toggle('active') // 有就移除,沒有就加
事件監聽
const btn = document.querySelector('#submit-btn')
// 點擊事件
btn.addEventListener('click', function(event) {
console.log('按鈕被點擊了')
event.preventDefault() // 阻止表單預設送出行為
})
// 輸入框變化
const input = document.querySelector('#search')
input.addEventListener('input', (e) => {
console.log('目前輸入:', e.target.value)
})
非同步 JS 與 API 呼叫
前端呼叫後端 API 需要等待,JavaScript 用 async / await 處理這種「等待」。
// async function 可以在裡面 await
async function getWeather(city) {
try {
// fetch 發送請求,await 等待回應
const response = await fetch(`/api/weather?city=${city}`)
// 確認 HTTP 狀態碼正常
if (!response.ok) {
throw new Error(`HTTP 錯誤:${response.status}`)
}
// 解析 JSON 回應
const data = await response.json()
console.log(data) // { city: "Taipei", temp: 28 }
return data
} catch (error) {
console.error('API 呼叫失敗:', error)
}
}
// 呼叫這個 function
getWeather('Taipei')
讀懂 AI 生的 JS:常見模式
| 看到這個 | 意思是 |
|---|---|
| const x = 值 | 宣告一個不會重新賦值的變數 |
| let x = 值 | 宣告一個可以重新賦值的變數 |
| 箭頭函式 | 和 function 類似但語法更短,寫成小括號加箭頭再加大括號 |
| array.map | 把陣列的每個元素轉換,回傳新陣列 |
| array.filter | 篩選陣列,只保留條件為真的元素 |
| JSON.stringify | 把 JS 物件轉成 JSON 字串 |
| JSON.parse | 把 JSON 字串解析成 JS 物件 |
| async / await | 處理非同步操作(API 呼叫、等待) |
| try / catch | 捕捉錯誤,防止程式崩潰 |
| 可選鏈 obj?.prop | 如果 obj 是 null 就回傳 undefined 而不是報錯 |
Console 是你的朋友遇到 JS 問題,第一步永遠是開開發者工具 Console 看錯誤訊息,第二步是用
console.log() 印出你懷疑有問題的變數值。這兩步能解決八成的前端問題。練習:讀懂一段收合按鈕的邏輯
const btn = document.querySelector('#toggle-btn')
const content = document.querySelector('.content')
btn.addEventListener('click', () => {
content.classList.toggle('hidden')
btn.textContent = content.classList.contains('hidden')
? '顯示' : '隱藏'
})
試著自己說一次點擊 id 為 toggle-btn 的按鈕,會切換 class 為 content 的元素的 hidden 類別(有就移除、沒有就加),同時把按鈕文字改成「顯示」或「隱藏」,形成一個收合按鈕的效果。
下一步的練習:做一個有輸入框和查詢按鈕的頁面,點擊後用 fetch 呼叫你的天氣 API,把城市名稱和溫度顯示在頁面上,不只是印在 Console。輸入台北並點查詢,頁面上要出現台北的溫度和天氣描述,開發者工具的 Network 面板能看到成功的請求,狀態碼是兩百。
延伸學習
知識變現切割地圖(高清版下載及陪跑型教材)
《知識變現切割地圖》的完整陪跑版:地圖高清檔,加上五章 27 萬字的網頁版講義與200 張練習卡。從語感引流設計、互動與轉化、內容分層與產品路徑,到角色鏡像與心理設計、內容資源切割再利用,一層一層把「會做內容」變成「能賣內容」。每一節後面都接著可以直接動手填的練習卡。
NT$ 19,800
知識變現切割地圖(高清版下載,不含講義)
《知識變現切割地圖》的高清完整版。一張圖把語氣、心理、內容、產品、再利用五層模組攤在同一個平面上,讓你回頭盤點已有內容、規劃新的轉化節奏。課程附上地圖本身的完整解說與應用指南,教你怎麼讀這張圖、從哪一層開始用。完整版 PDF 可下載,放大看細節不會糊。
NT$ 680
常見問答
const 和 let 有什麼不同?
const 宣告一個不會重新賦值的變數,let 宣告一個可以重新賦值的變數。AI 生成的程式碼預設會優先用 const,只有確定值會改變時才用 let。
async / await 是在做什麼?
async 宣告一個非同步函式,await 讓程式等待一個 Promise(例如 fetch 呼叫 API)完成後再往下執行,讓非同步的程式碼讀起來跟同步程式碼一樣直覺。
遇到前端問題應該先看哪裡?
先開開發者工具的 Console 面板,看有沒有紅色錯誤訊息,再用 console.log() 印出你懷疑有問題的變數值。這兩步就能解決八成的前端問題。
什麼是可選鏈 obj?.prop?
可選鏈是 JavaScript 的安全取屬性語法,如果 obj 是 null 或 undefined,就回傳 undefined 而不是直接拋出錯誤,常用來避免 Cannot read properties of null 這類錯誤。

