1 JavaScript 是甚麼?為何網頁需要它?
重點
- HTML 負責結構、CSS 負責外觀、JavaScript 負責行為與互動。
- JavaScript 在瀏覽器中執行,可回應使用者操作、進行計算、以及即時更新頁面內容。
- 程式即使沒有畫面變化也可能已正常執行;要靠輸出與除錯工具判斷結果。
- 學習 JavaScript 時,建議先把解題步驟寫成流程清單(逐步寫出「先做甚麼、再做甚麼」),再把它轉成語法。
JavaScript 是一種常用的程式語言,主要在瀏覽器中執行,用來為網頁加入互動與行為,例如: 按鈕點擊反應、表單檢查、動態更新文字/圖片、即時計算與顯示結果。
- HTML(結構):內容是甚麼、元素之間如何排列(例如標題、段落、按鈕、輸入框)。
- CSS(外觀):長甚麼樣(例如顏色、大小、版面、動畫效果)。
- JavaScript(行為):做甚麼(例如按下按鈕就計算、就顯示、就改變內容)。
當瀏覽器載入網頁時,大致流程是:讀取 HTML → 建立 DOM → 套用 CSS → 執行 JavaScript。 JavaScript 常見以事件驅動程式方式運作:先設定事件處理器(例如「按鈕被點擊」), 然後等待使用者操作,事件發生時才執行對應程式。
重要觀念:執行 ≠ 一定有畫面變化。如果程式只是計算、更新變量、或只寫到控制台,畫面可以完全不變。
例子:同一個按鈕,有無 JavaScript 的分別
- 只有 HTML:按鈕只是「一個元素」,除非連結到其他頁,否則通常不會「自己做事」。
- 加入 JavaScript:按鈕點擊後可即時改文字、做計算、顯示提示、甚至改變整個頁面內容。
下面練習會示範「無 JavaScript」與「有 JavaScript」的差異。
- HTML vs JavaScript:HTML 描述內容;JavaScript 改變內容。
- CSS vs JavaScript:CSS 主要處理外觀;JavaScript 主要處理邏輯與互動(但也可以改 style)。
- 客戶端 vs 伺服器端:JavaScript(本章)主要在瀏覽器執行;伺服器端語言(例如 PHP)在伺服器執行並回傳結果。
- 把 JavaScript 當成「改顏色工具」:其實 CSS 才是主力;JS 應用於互動與邏輯更合適。
- 以為「畫面沒有改變」就等於「程式沒有執行」:可能只是沒有輸出,或輸出去了控制台。
- 未理解分工就混寫:HTML/CSS/JS 全部塞在同一段,導致難讀、難改、易出錯。
如果把網頁比喻成一間店舖:HTML 像「店內擺設與指示牌」、CSS 像「裝修與設計風格」; JavaScript 則像「店員的行為」——顧客按鈴、店員就回應;顧客輸入資料、店員就計算並顯示結果。
因此,學 JavaScript 的第一步,不是死背語法,而是理解:我想讓網頁在甚麼情況下做甚麼事? 先用流程清單把步驟寫清楚,再把它翻譯成 JavaScript,就會容易得多。
練習 1:同一個按鈕,有無 JavaScript 的分別
先執行下面程式,再嘗試按按鈕,觀察畫面有沒有改變。
提示:你可以嘗試為按鈕加入
id,但如果仍然沒有程式處理事件,按鈕也不會「自動做事」。
執行後按按鈕,看看文字如何即時改變。然後嘗試把訊息改成你自己的句子。
提示:
btn.onclick = ... 是最常見的入門寫法之一。
- 說明 JavaScript 的角色,並清楚分辨 HTML/CSS/JavaScript 的分工。
- 懂得使用
<script>,並理解放置位置與執行時機。 - 使用
alert()、console.log()、以及把結果顯示在頁面上作輸出與除錯。 - 宣告與更新變量(
let/const),並處理基本資料類型與字串(含跳出字元)。 - 用
document.getElementById()取得元素,並更新textContent/innerHTML/ 屬性。 - 讀取輸入框
.value,用事件處理器把「操作」連到程式。 - 寫
if與循環(for/while),並用while生成表格。 - 理解陣列與物件的用途,並用簡單例子存取與處理資料。
2 <script> 標籤與放置位置
重點
<script>用來放置 JavaScript 程式;也可用src引用外部.js檔案。- 腳本的放置位置會影響執行時機:太早執行可能找不到元素(得到
null)。 - 常見做法:把
<script>放在</body>前,或對外部腳本加上defer。 - 外部
.js檔案可重用、易維護,亦有助保持 HTML 結構清晰。
<script> 是 HTML 中用來放置或載入 JavaScript 的標籤,常見兩種形式:
- 內嵌 JavaScript:直接把程式寫在
<script>...</script>之間。 - 外部 JavaScript:用
<script src="..."></script>引用外部.js檔案。
瀏覽器會由上而下讀取 HTML。當遇到 <script>,一般情況下會先執行 JavaScript,然後才繼續往下建立頁面。
因此,如果腳本放得太早,而你又嘗試用 document.getElementById() 取得「還未出現」的元素,就會得到 null。
對外部腳本常用 defer:它會讓瀏覽器先把 HTML 建好(DOM 就緒),然後才執行腳本,避免「找不到元素」。
例子:腳本太早執行,找不到按鈕
- 錯誤寫法:在按鈕出現之前就寫
document.getElementById('btn')。 - 修正方法:把
<script>移到按鈕之後;或把程式包進DOMContentLoaded事件;或使用外部腳本配合defer。
- 內嵌 vs 外部:內嵌方便示範;外部較適合正式網站(可重用、可維護)。
- 放 head vs 放 body 底:放 head 可能太早;放 body 底較安全(元素多數已載入)。
- defer vs 不加:
defer讓外部腳本延後到 DOM 建好後才執行,較少出錯。
- 忘記關閉
</script>,導致後面的 HTML 被當成程式碼。 src路徑寫錯,腳本其實沒有載入,但畫面又未必有提示。- 同一個外部腳本重覆載入兩次,造成事件處理器被重覆綁定(點一下跑兩次)。
初學時最常遇到的問題之一,就是「明明寫了 JavaScript,為何按鈕沒有反應?」其中一個常見原因是:程式在元素建立之前已執行,
取得元素時得到 null,後續自然無法設定事件處理器。
為了令程式更穩定,你可以先養成一個習慣:先寫好 HTML 元素(例如按鈕、輸入框),再寫 JavaScript 去取得與操作它。
如果把 JavaScript 放在頁面底部(靠近 </body>),通常就能避免「太早執行」的問題。
練習 2:腳本太早執行會發生甚麼?(請你修正)
下面程式會顯示「找不到按鈕」,因為腳本在按鈕出現前已執行。請你嘗試用其中一種方法修正:
(1)把 <script> 移到按鈕之後;或(2)用 DOMContentLoaded 包住主要程式。
提示:
document.addEventListener('DOMContentLoaded', ...) 會在 DOM 建好後才執行。
Check Point 1:JavaScript 的角色與 <script> 基礎
(載入中…)
3 輸出與除錯:alert()、console.log() 與「無輸出也可正常」
重點
alert()可彈出提示視窗,適合快速示範,但不適合大量除錯。console.log()會輸出到瀏覽器控制台,是最常用的除錯方法之一。- 程式可以「只計算、不顯示」,畫面完全不變仍屬正常;要靠輸出或控制台確認變量值。
- 程式錯誤與沒有視覺效果是兩回事:錯誤會阻止後續語句執行。
- 輸出(Output):把結果顯示給使用者看(例如頁面文字、提示訊息)。
- 除錯(Debug):找出程式為何沒有按預期運作,常見做法是把中間變量值印出來檢查。
- 控制台(Console):瀏覽器開發者工具的一部分,用來查看
console.log()輸出與錯誤訊息。
alert() 會暫停頁面,直到使用者按「確定」才繼續;因此適合少量示範,但不適合逐行檢查。
console.log() 則不會阻塞,能持續輸出訊息,適合觀察循環、判斷與變量變化。
常見誤會:看到畫面「沒有改變」就以為程式沒有執行。其實程式可能已改了變量,只是沒有把結果輸出到畫面。
- 無輸出但正常:
let x = 5; x = x + 10;只改了變量,畫面不會變。 - 有輸出:加入
console.log(x)或把 x 寫入textContent,你就能確認結果。 - 有錯誤:使用未定義變量(例如
y)會產生錯誤,後續語句不會執行。
- alert():快、直觀、但阻塞畫面。
- console.log():非阻塞、可大量輸出、配合控制台最強。
- 顯示在頁面:適合給使用者看(例如結果、提示),亦可用作入門除錯。
- 只用
alert()除錯,令程式不停彈窗,反而難追蹤。 - 忽略控制台紅色錯誤訊息,以為只是「沒有反應」。
- 把錯誤訊息當成「輸出」,沒有先分清楚:是程式錯了,還是只是沒有顯示。
在寫程式時,「看不到畫面變化」很常見:例如你只是在計算、或只是在準備資料。這時最有效的方法,是主動加入輸出,
或打開瀏覽器開發者工具的控制台查看 console.log() 的訊息。
另一方面,如果程式真的出錯,控制台通常會顯示錯誤位置與原因(例如「某變量未定義」)。學會分辨 「沒有視覺效果」與「程式錯誤」,能大幅提升你寫 JavaScript 的速度與信心。
空運行練習 1:無輸出仍正常(請你自行加入輸出)
下面程式已經把 x 計算完成,但未有輸出。請你取消註解 console.log 那一行,或把結果寫到頁面上。
x 的最終值,並說明「畫面沒有改變」不一定代表程式沒有執行。
練習 4:程式錯誤 vs 沒有視覺效果
下面例子會故意出錯。請你觀察錯誤訊息,再修正程式令它可以繼續執行。
Check Point 2:輸出與除錯
(載入中…)
4 變量、資料與字串:let / const、資料類型、跳出字元
重點
let用來宣告可改變的變量;const用來宣告常數(不可重新賦值)。- 常見資料類型:數字(number)、字串(string)、布爾值(boolean)。
- 把變量放入輸出:可用
+串接字串,或用模板字串`...${x}...`。 - 跳出字元(escape character)用來表示特殊符號,例如
\n換行、\"引號、\\反斜線。
- 變量(variable):用名稱代表一個值,值可在程式執行期間改變。
- 常數(constant):名稱所指向的值不應被重新賦值(用
const)。 - 資料類型:值的種類,例如數字、字串、布爾值。
- 字串(string):一段文字,例如
"Hello";可用單引號或雙引號。 - 跳出字元(escape character):用反斜線
\表示「把下一個符號當成特殊意思」,例如\n表示換行。
let x = 5; 表示建立一個名為 x 的變量,並把值 5 放進去;之後可以再寫 x = x + 1; 更新它。
const 則用來避免「不小心改了不應改的值」。
字串可以串接:"總分:" + score;也可以用模板字串:
`總分:${score}`。模板字串通常更清晰,亦較少括號與引號錯誤。
跳出字元的核心原因:當你需要在字串內表示「引號」「反斜線」或「換行」這些特殊符號時,必須告訴電腦不要把它們當成字串結束或普通字符。
let name = "Amy";console.log("Hello " + name);console.log(`Hello ${name}`);"她說:\"你好\""(在字串中放入雙引號)"第一行\n第二行"(在字串中換行)
- let vs const:
let可重新賦值;const不可重新賦值(較安全)。 - + 串接 vs 模板字串:模板字串可讀性高,特別適合「一句話包含多個變量」。
- '...' vs "...":功能相同;選一種風格並保持一致即可。若字串內含雙引號,可用單引號包住,或使用跳出字元。
- 忘記用
let/const宣告就直接使用變量,導致錯誤或變成隱式全域變量。 - 把
const當成「永遠不能改內容」:實際上是「不能重新賦值」(初學階段先記住這句即可)。 - 用
+串接時把數字變成字串:例如"10" + 5會得到"105"。 - 引號配對錯、或忘記跳出字元,導致字串提早結束。
JavaScript 的變量與資料類型,是之後寫判斷與循環的基礎。當你能清楚分辨「數字」與「字串」, 就不容易在加減乘除與文字顯示之間混淆。
另外,字串是網頁開發最常見的資料之一:你需要顯示提示訊息、把使用者輸入放入句子、或動態生成 HTML。
因此,理解跳出字元(例如 \n、\"、\\)能避免大量「引號錯誤」。
練習 5:宣告與更新變量,並把變量放入輸出
修改 qty 與輸出句子,並嘗試同時使用「串接」與「模板字串」。
qty 改成 5,並用模板字串顯示「總額:$...」。
練習 6:字串與跳出字元(escape character)
嘗試自行加入更多例子:例如在句子中同時包含雙引號與換行;或用 \\ 顯示路徑。
Check Point 3:變量、資料類型與字串
(載入中…)
5 存取與修改 HTML:getElementById()、textContent、innerHTML、屬性
重點
- 用
document.getElementById('id')取得指定元素,再修改它。 textContent只會當成文字;innerHTML會把內容當作 HTML 解析(要小心)。- 可修改元素屬性(例如
src、href、value)令頁面即時更新。 - 如果取得元素得到
null,通常是id寫錯、元素不存在、或腳本執行太早。
- DOM(Document Object Model):瀏覽器把 HTML 轉成一棵物件樹,讓程式可存取與修改。
document.getElementById():以id取得元素物件。textContent:把內容當成純文字設定/讀取。innerHTML:把內容當成 HTML 片段設定/讀取。- 屬性(attribute):元素上的設定,例如
img的src、a的href、input的value。
取得元素後,你其實是拿到一個「可操作的物件」。改它的屬性或內容,就等於改變網頁的某一部分。 這正是 JavaScript 在網頁中最常做的事:讀取狀態 → 計算 → 更新 DOM。
使用 innerHTML 時,瀏覽器會把字串重新解析成 HTML。若把使用者輸入直接放入 innerHTML,
可能造成安全問題;初學階段請先記住:能用 textContent 就優先用它。
- 按鈕被點擊 → 把
<p>的文字改掉(textContent)。 - 按鈕被點擊 → 把圖片換成另一張(改
img.src)。 - 按鈕被點擊 → 把一段列表 HTML 放入
innerHTML生成多行內容。
- textContent:安全、直覺、只顯示文字。
- innerHTML:功能強,可生成標籤,但需小心輸入來源與標籤結構。
- 直接設屬性 vs setAttribute:兩者都可以;初學可先用
img.src = ...這類直覺寫法。
- 把
getElementById('#msg')寫成帶#:注意這裡不用#。 - HTML 中沒有該
id,或同一頁出現重覆id,導致取得錯誤元素。 - 把使用者輸入直接放入
innerHTML,令標籤被意外解析。
一旦你能熟練 getElementById()、textContent 與 innerHTML,
你就可以做到大部分入門級的「互動網頁」:例如按鈕改文字、顯示計算結果、或動態產生表格。
最重要的是:每次操作之前先問自己——我要改的是「文字」還是「HTML 結構」?
如果只是改文字,優先選用 textContent;需要生成標籤時才考慮 innerHTML。
空運行練習 3:事件處理器入門(按按鈕先有反應)
嘗試把顯示文字改為你自己的版本,並加入第三種狀態(例如「暫停」)。
started 變量如何控制畫面輸出。
6 使用者輸入與事件處理:.value、onclick、addEventListener
重點
- 讀取文字輸入框內容用
.value(注意:讀到的是字串)。 - 常見流程:輸入 → 處理 → 輸出(讀取 → 計算/判斷 → 顯示結果)。
onclick容易上手;addEventListener更靈活,適合建立較完整的事件驅動程式。- 輸入通常需要做有效性檢驗:例如是否空白、是否數字、是否在合理範圍。
- 事件(event):使用者或系統觸發的動作,例如點擊、輸入、改變選項。
- 事件處理器(Event handler):當事件發生時要執行的函式。
.value:讀取輸入框目前的文字(型態為字串)。- 有效性檢驗(validation):檢查輸入是否合理,例如「必須是數字」「不可留空」。
在網頁中,很多程式都不是「一開始就跑完」,而是先把事件處理器設定好,等事件發生才執行。
例如:使用者輸入兩個數字 → 按「計算」→ 程式才讀取 .value,再把結果顯示出來。
注意:.value 取到的是字串。若要做數學運算,通常要用 parseInt() / parseFloat() 或 Number() 轉成數字。
btn.onclick = function(){ ... }:最直接的綁定方法。btn.addEventListener('click', () => { ... }):較彈性,可同一事件加多個處理器。- 有效性檢驗例子:如果輸入不是數字,就顯示提示並停止計算。
- onclick:語法短、易上手;但大型程式容易變得零散。
- addEventListener:可管理多個事件、較易分工與維護。
- 不檢查輸入 vs 有效性檢驗:不檢查會導致
NaN或錯誤結果;檢查可提升可靠性。
- 忘記把字串轉成數字,導致
"10" + "5"變成"105"。 - 輸入留空仍計算,結果變成
NaN。 - 取得元素為
null仍繼續用,導致錯誤。
使用者輸入與事件處理,是把「程式」真正變成「互動網頁」的關鍵。只要你能做到「按一下按鈕就讀輸入、處理、再輸出」, 你就可以寫出大量常見的小工具:計算器、分數統計、格式轉換、簡單問答遊戲等。
同時,請養成做有效性檢驗的習慣。即使只是檢查「是否空白」或「是否數字」,也能令程式更可靠,更接近真實應用。
練習 8:輸入 → 處理 → 輸出(兩數相加)
試試輸入非數字、留空、或小數,觀察有效性檢驗如何影響輸出。
c,計算 a + b + c,並保持有效性檢驗。
Check Point 4:DOM、輸入與事件處理
(載入中…)
7 條件判斷與重複執行:if / else、for / while、用 while 生成表格
重點
if/else用來控制流程;比較運算子包括>、<、>=、<=、===、!==。===會同時比較「值」與「資料類型」,比==更安全。for適合次數已知的循環;while適合以條件控制的循環(直到條件不成立)。- 寫循環要避免無限循環;每次迭代都要更新控制變量。
- 用
while生成表格時,常用「先組合 HTML 字串 → 一次過寫入innerHTML」。
- 條件判斷:根據條件是否成立,選擇不同的語句執行。
- 比較運算子:用來比較兩個值,例如
a > b。 - 循環(loop):重複執行一段語句;常見
for與while。 - 無限循環:條件永遠成立,導致程式永遠不停止。
if 的核心是「先判斷,再決定做哪條路」。而循環的核心是「重複做,直到條件不再成立」。
在循環中,你通常需要一個控制變量(例如 i),並在每次迭代更新它,否則就可能陷入無限循環。
== 會做隱式轉型(例如把字串轉成數字再比較),初學階段容易誤判;建議優先使用 ===。
- if / else:根據分數顯示「合格/不合格」。
- for:輸出 1 到 10(次數已知)。
- while:當使用者未輸入有效數字,就一直提示(次數未必已知)。
- while 生成表格:用雙重 while 產生 row/col,逐格加入 HTML。
- for vs while:for 多用在「數到某個上限」;while 多用在「符合條件就繼續」。
- === vs ==:
===較嚴謹,減少意外轉型帶來的錯誤。 - 逐次更新 DOM vs 一次過寫入:生成大量內容(例如表格)時,一次過寫入通常較清晰亦較有效率。
- 把
=(賦值)誤寫成===(比較)或相反。 - 循環條件寫錯(例如
i <= n/i < n搞亂),造成多一次或少一次。 - 忘記在 while 中更新控制變量,造成無限循環。
- 用
innerHTML += ...不斷追加而沒有清空,導致重覆輸出。
if 與循環是所有程式語言的骨架:if 讓你根據不同情況做不同反應;循環讓你不需要重覆寫相同語句。 在網頁中,它們常用來做表單檢查、資料統計、動態產生列表或表格。
本章最後會以「用 while 生成表格」作綜合練習:你會同時用到輸入、有效性檢驗、雙重循環與 DOM 更新。 這也是 DSE ICT 常見的整合型題目方向。
空運行練習 2:追蹤 if / else(先預測,再驗證)
此練習用來訓練空運行:先不要急於按「執行」;請先用紙筆追蹤每一步如何改變 score 與 level。
推理完成後,再解除註解,把結果輸出作核對。
score 與 level 的值,再解除註解驗證。
答案(按我展開)
score 初值 48,所以 level 會被設定成「不合格」;
之後 score = score + 15,所以最後 score = 63。
注意:level 不會因為 score 改變而自動更新,因此仍然是「不合格」。
練習 9:if / else(分數是否合格)
練習 10:for 與 while(輸出 1 到 N)
先用 for,再用 while。兩段程式應該產生相同輸出。
練習 11:用 while 循環生成表格(乘法表)
這是一題綜合練習:輸入 → 有效性檢驗 → 雙重 while → 動態生成 <table>。
row + col / row^2 等。
8 陣列與物件:整理多筆資料
重點
- 陣列用來儲存一組有次序的資料,以索引存取(通常由 0 開始)。
- 常用:
arr.length取得長度、arr.push(x)加入資料、配合循環逐項處理。 - 物件用「鍵 → 值」描述一筆資料,例如
{name: "Amy", score: 88}。 - 常見內建:
parseInt()/parseFloat()轉數字;Math做基本運算。
- 陣列(array):一組有次序的資料集合,例如
[70, 85, 92]。 - 索引(index):用來定位陣列中第幾個元素;在 JavaScript 中通常由 0 開始。
- 物件(object):以「鍵(key)→ 值(value)」儲存資料,例如
{name: "Chris", score: 90}。
當你有多個同類型數據(例如多個分數、多個溫度、多個商品價格),陣列能讓你用循環逐個處理, 不需要為每個數據寫一個獨立變量。
當你想把多個「屬性」組合成一筆資料(例如一位學生有姓名與分數),物件能把相關資料放在一起, 令程式更清晰。
- 用陣列計算總和與平均值。
- 用物件表示一位學生:
{ name: "Alex", score: 78 }。 - 配合
Math.round()把平均值四捨五入。
- 陣列:強調「次序」,用索引。
- 物件:強調「屬性」,用鍵名。
- parseInt vs parseFloat:前者取整數;後者可有小數。
- 索引越界:例如陣列長度是 5,但使用
arr[5](第 6 個)會得到undefined。 - 把鍵名拼錯:例如
student.scroe會是undefined。 - 忘記轉數字:把字串陣列當成數字陣列直接加總,結果會串接成字串。
當資料變多,你會很快發現:只用一堆變量會令程式難讀又難改。陣列與物件能把資料整理得更有系統, 亦更容易配合循環與函式處理。
在入門階段,你不需要背太多陣列方法;只要掌握:索引、length、以及如何用循環逐項處理, 就足以應付大部分基礎題目。
練習 12:用陣列計算平均值,並用物件整理結果
scores 改成你自己的 6 個分數,並輸出最高分與最低分(提示:使用循環比較)。
9 總結小測:綜合概念檢查
重點
- 本小測會混合:
<script>、輸出/除錯、變量/字串、DOM/事件、if、循環、陣列/物件。 - 作答時先想清楚「程式想做甚麼」,再對照語法與概念。
- 做錯題目時,請閱讀解釋並回到對應段落,用模擬器再試一次。
綜合題的關鍵不是背語法,而是能把概念串起來:事件 → 讀輸入 → 變量運算 → if/循環 → 更新 DOM。
- 先辨認:這題要你做「輸出」還是「除錯」?
- 再辨認:需要操作 DOM 嗎?需要讀取
.value嗎? - 最後:把流程用「逐步步驟」寫清楚(即使只在腦中),再轉成 JavaScript。
如果題目是「按按鈕後顯示 1..N 的表格」:你應立即想到要用事件處理器、輸入轉數字、循環、以及一次過更新 innerHTML。
- 只背語法:見到變形題就容易卡住。
- 先想流程:語法只是把流程寫出來,錯誤會少很多。
- 忽略「輸入其實是字串」的問題,直接做加法導致串接。
- 用
innerHTML拼接時忘記清空,重覆輸出。 - 循環條件寫錯,造成少一行或多一行。
Check Point 5:總結(20 題小測的一部分)
(載入中…)
10 挑戰題:把概念串起來(20 題)
重點
- 每一題都以「輸入 → 處理 → 輸出」的思路設計:先讀取資料,再用 JavaScript 計算/判斷/循環,最後更新 HTML。
- 遇到「畫面沒有反應」,先分辨是沒有視覺效果,還是程式錯誤;善用
console.log()與控制台訊息。 - 建議做題流程:先寫流程清單 → 再補齊 JavaScript → 最後才整理 HTML 顯示。
- 每題都提供一個獨立模擬器,你可以在同一段落內即時修改與測試。
- 挑戰題:以較完整的情境把多個概念串連(例如變量+if+循環+DOM),要求你能獨立寫出可運作的程式。
- 除錯(debug):找出程式「不按預期運作」的原因;常見方法包括:查看控制台錯誤、在關鍵位置輸出變量值、逐步縮小問題範圍。
大部分互動式網頁題目都可以拆成三段:取得資料(例如 .value、陣列資料、物件屬性)→
處理(運算、條件判斷、循環)→ 顯示結果(textContent / innerHTML / 屬性修改)。
你只要清楚每一段要做甚麼,就能把題目變成一小步一小步的語句。
另外,有些程式「一開始」看不到效果是正常的(例如只綁定事件處理器,等待使用者按按鈕才會執行)。
例子:製作「兩數相加」小工具
- 流程清單:讀取 a、讀取 b、把 a 和 b 轉成數字、計算 sum、顯示 sum。
- JavaScript:
const a = parseFloat(...);、const sum = a + b;、out.textContent = sum; - 重點:如果直接做
a + b但 a/b 是字串,就會變成串接。
- 只背語法:見到變形題(例如加入循環、加入驗證)就容易卡住。
- 先拆流程:把題目拆成多個小步驟,再逐步寫成語句,較容易一次做對。
- 只看畫面 vs 看控制台:控制台會告訴你錯誤位置與原因,能更快找到問題。
- 把
.value當成數字使用,導致"2" + "3"變成"23"。 - 在循環中不小心把結果重覆累積(忘記清空輸出區,或把
innerHTML += ...用錯位置)。 - 用錯比較運算子(把
=當成比較;或混淆==/===)。 - 事件處理器寫好了,但忘記在 HTML 綁定(或元素 id 名稱對不上)。
下面 20 題挑戰題會由淺入深,覆蓋本章的大部分基礎能力:輸出、變量、字串、DOM、輸入、事件、if、循環、陣列與物件。 你不需要一次過做完;建議每完成一題,就回看自己的程式:哪一步是「取得資料」、哪一步是「處理」、哪一步是「顯示」。
做題時,請刻意練習「空運行」:在未執行前,先預測每一步會把變量改成甚麼,然後再用模擬器驗證。這能幫助你在筆試或遇到複雜程式時, 仍然能夠清楚追蹤程式流程。
溫馨提示:請先嘗試自行完成,再打開「提示」或「參考答案」。參考答案的目的,是讓你對照自己漏了哪一步,而不是直接抄寫。
(正在載入挑戰題…)