課後練習題
對應 Notes 各單元的課後練習,點擊「▶ Execute」查看執行結果
用 typeof 偵測以下值的型別,思考 null 的結果為何特殊:
42、"Hello"、true、undefinednull(為什麼結果是 "object"?)- 一個函式
function f(){}
寫一個函式 circleArea(r) 計算圓面積,並用 template literal 格式化輸出:
- 定義
circleArea(r),回傳Math.PI * r * r - 呼叫 r = 1, 5, 10 並印出結果
- 用
if-else判斷面積是否大於 100
用反引號 template literal,不使用 +,完成以下輸出:
- 定義
name = "LYZ",score = 95 - 印出「LYZ 的成績是 95 分」
- 用三元運算子判斷成績等級(≥90 → 優秀)
給定 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
- 用
filter()取出偶數 - 再用
map()乘以 3 - 印出最終結果
[...].filter(...).map(...)建立並操作一個學生物件:
- 建立含
name、scores[]、grade的物件 - 用
Array.push新增一個成績 - 計算平均分數
- 用
JSON.stringify印出整個物件
練習 JSON 序列化與反序列化,並思考邊界情況:
- stringify 一個物件 → 得到字串
- parse 還原 → 取出屬性
JSON.stringify(undefined)回傳什麼?
用 JS 動態操作 DOM:
- 準備陣列
["蘋果", "香蕉", "芒果"] - 用
forEach動態建立<li> - 點擊任一項目,用
addEventListener印出名稱
用 querySelector 選取色塊,加上 click 事件,每次點擊切換顏色並印出次數:
用 setInterval 每秒更新一次數位時鐘,格式 HH:MM:SS(記得 padStart 補零):
5 秒內進度從 0% 增加到 100%,完成後 clearInterval 停止:
切換 justify-content 值,觀察主軸上子元素的排列變化:
同時控制 align-items(交叉軸)與 flex-wrap(換行):
切換欄位設定,體驗 fr 彈性單位的效果:
拖曳滑桿調整 gap(0–32px),觀察格線間距變化:
點按鈕模擬不同螢幕的 @media query 斷點效果:
clamp(min, val, max) 讓字體在不同視窗寬度下自動縮放,不需要 @media:
點擊按鈕切換動畫類型,觀察 @keyframes 與 animation 搭配效果:
三個色塊各有不同的 transition 時長,滑鼠移上去觀察過渡速度差異:
先在腦中預測輸出順序,再點執行驗證:
模擬「送出訂單 → 滑手機 → 披薩做好」的非同步流程(3秒後):
以下程式有什麼問題?使用者會看到什麼?
建立一個 Promise 模擬擲骰子:擲到 6 → resolve,否則 → reject,用 .then() 和 .catch() 處理結果。
用 Promise 鏈串起「起床 → 刷牙 → 吃早餐」,每步間隔 1 秒,每步印出收到的訊息。
用 async/await 取得 todos/1,印出 title 和 completed,記得加 try/catch。
取得 /posts,印出總篇數與前 5 篇標題,並在下方建立 <ul> 顯示。
故意呼叫不存在的網址,觀察 response.ok 與 response.status 的值。
先取得 User #1,再取得其所有文章,顯示名字與文章清單。
用 Promise.all() 同時取得 users、posts、todos,顯示統計 Dashboard。
自訂秒數、暫停/繼續、進度條視覺化,倒數結束後用 Promise.all() 同時取得資料。