JavaScript教學:基礎語法、DOM 操作與範例練習
javascript教學先從變數、函式與條件判斷開始,帶你理解 JavaScript 基礎語法、DOM 操作與事件處理,並用可直接貼到瀏覽器執行的範例,練會按鈕互動、文字更新與小型網頁功能。
JavaScript 是什麼?它在網頁中負責什麼
JavaScript 是讓網頁產生互動、行為與動態內容的程式語言。HTML 負責結構,CSS 負責外觀,JavaScript 負責使用者點擊、輸入、切換內容、驗證表單、更新畫面等行為。
| 技術 | 負責內容 | 常見例子 |
|---|---|---|
| HTML | 網頁結構 | 標題、段落、按鈕、表單 |
| CSS | 視覺樣式 | 顏色、字體、排版、間距 |
| JavaScript | 互動行為 | 點按鈕改文字、表單檢查、切換 class |
HTML、CSS、JavaScript 的分工
把網頁想成一個可操作的畫面,HTML 是畫面上有哪些元素,CSS 是元素看起來如何,JavaScript 則是在使用者操作後決定畫面怎麼變。初學者常卡住的地方,不是語法本身,而是不知道 JavaScript 最後要接到哪個 HTML 元素。
為什麼現在還值得學 JavaScript
只要目標是做網站,JavaScript 仍然是瀏覽器中最直接的互動語言。即使只會基礎語法,也能處理選單開合、按鈕狀態、表單提示、內容切換。我的判斷是:先把 DOM 和事件練熟,比一開始追很多名詞更有用。
JavaScript 可以延伸到哪些方向,但本文只先學基礎
JavaScript 入門後可以延伸到 API 串接、資料處理、前端元件化與伺服器端程式。不過第一階段應該先把變數、函式、條件判斷、DOM 操作、事件處理弄懂,因為這些才是做出互動網頁的底層能力。
開始寫第一段 JavaScript:放在哪裡、怎麼執行
JavaScript 可以寫在 HTML 的 <script> 標籤中,也可以放在外部 .js 檔案,再由 HTML 載入。新手最適合先用瀏覽器 Console 和最小 HTML 範例確認程式真的有執行。
用 <script> 寫在 HTML 裡
最小範例可以直接存成 index.html 後用瀏覽器開啟。把 <script> 放在頁面元素後面,JavaScript 才選得到前面的 HTML。
<h1 id="title">原本的標題</h1>
<script> const title = document.querySelector(“#title”); title.textContent = “這是 JavaScript 改過的標題”; </script>
用外部 .js 檔案管理程式碼
當程式碼變多時,建議拆成外部 JS 檔案,HTML 負責結構,JavaScript 檔案負責互動。這樣檔案比較好維護,也比較接近真實網站的做法。
<h1 id="title">網站標題</h1>
<script src="main.js"></script>
const title = document.querySelector("#title");
title.textContent = "外部 JS 檔案已載入";
console.log()、alert() 與修改網頁文字的差別
console.log() 主要給開發者檢查資料,alert() 會跳出提示視窗,修改 DOM 則會真的改變網頁內容。實務上我會優先用 Console 檢查,再把結果接到畫面上。
console.log("檢查程式是否執行"); alert("這會跳出提示視窗");
const message = document.querySelector(“#message”); message.textContent = “這行文字會顯示在網頁上”;
JavaScript 基礎語法速查
JavaScript 基礎語法包含註解、語句、分號、大小寫、命名規則與程式區塊。先掌握這些規則,讀程式碼時才知道每一行在做什麼,也比較容易找出錯誤。
| 語法項目 | 用途 | 範例 |
|---|---|---|
| 註解 | 說明程式碼,不會被執行 | // 這是註解 |
| 語句 | 一個可執行的指令 | const name = "建宏"; |
| 區塊 | 用大括號包住一組程式碼 | if (ok) { ... } |
| 命名 | 替變數或函式取可讀名稱 | userName |
註解、語句與分號
註解是給人看的說明,語句是給瀏覽器執行的指令。分號多數時候可省略,但初學階段保留分號有助於看清楚每一行的結尾。
// 儲存使用者名稱 const userName = "Amy";
// 顯示在 Console console.log(userName);
大小寫與命名規則
JavaScript 會區分大小寫,userName 和 username 是兩個不同名稱。變數命名建議用小駝峰,例如 totalPrice、submitButton,名稱要看得出用途。
程式區塊 {} 怎麼看
大括號代表一組程式碼的範圍,常出現在條件判斷、函式、迴圈裡。看 JavaScript 時,先找到外層大括號,再看裡面每一行,會比從頭硬讀更穩。
if (isMember) {
console.log("顯示會員優惠");
}
變數與資料型態:let、const、字串、數字、布林
變數用來儲存可重複使用的資料,常見資料型態包含字串、數字、布林值、陣列與物件。初學者建議預設用 const,真的需要重新指定值時才用 let。
| 寫法 | 能否重新指定 | 建議使用情境 |
|---|---|---|
const |
不能 | 不會重新指定的資料、DOM 元素、設定值 |
let |
可以 | 計數器、狀態切換、會變動的值 |
var |
可以 | 舊程式碼中會看到,新專案不建議當預設 |
let、const、var 差在哪
const 適合大多數情況,因為它能避免不小心重新指定資料。let 適合需要變動的值。var 是早期寫法,初學時知道它存在即可。
const siteName = "makewebsites.tw"; let clickCount = 0;clickCount = clickCount + 1;
console.log(siteName); console.log(clickCount);
字串、數字、布林值
字串是文字,數字可做計算,布林值只有 true 或 false,常用在條件判斷。資料型態不是背名詞,重點是知道每一種資料能做什麼。
const title = "JavaScript教學"; const price = 1200; const isPublished = true;
console.log(title, price, isPublished);
陣列與物件的入門用法
陣列用來存放多筆同類資料,物件用來描述一個東西的多個屬性。文章列表、選單項目、商品資料,都常用這兩種結構。
const lessons = ["變數", "函式", "DOM"]; const article = { title: "JavaScript 入門", author: "陳建宏", year: 2026 };
console.log(lessons[0]); console.log(article.title);
初學者建議:預設用 const,需要改值才用 let
我的習慣是先寫 const,當你真的遇到數字累加、狀態切換、輸入內容更新,再改成 let。這個規則能讓程式碼更穩,也會逼你想清楚資料是否應該被改動。
運算子與條件判斷:讓程式做決策
運算子用來比較、計算或組合條件,條件判斷則根據布林結果執行不同程式碼。表單驗證、會員狀態、按鈕是否可點,都會用到這一層邏輯。
比較運算子與邏輯運算子
比較運算子會產生 true 或 false,邏輯運算子則把多個條件組合起來。初學者要先習慣用嚴格比較 ===。
const age = 20; const hasTicket = true;
console.log(age >= 18); console.log(age >= 18 && hasTicket);
if...else 基本寫法
if...else 是最常見的判斷語法。條件成立就執行第一段,不成立就執行另一段。寫判斷時,先把條件用白話講清楚,再轉成程式碼。
const score = 75;
if (score >= 60) { console.log(“及格”); } else { console.log(“需要再練習”); }
表單驗證的簡單判斷例子
表單驗證的核心就是檢查輸入是否符合條件。下面例子會判斷姓名是否為空,若沒有輸入,就顯示提示文字。
<input id="nameInput" type="text" placeholder="輸入姓名"> <p id="error"></p><script> const nameInput = document.querySelector(“#nameInput”); const error = document.querySelector(“#error”);
if (nameInput.value === "") { error.textContent = “請先輸入姓名”; } </script>
函式教學:參數、回傳值與重複使用
函式可以把重複使用的邏輯包起來,需要時再呼叫。函式可接收參數,也可以用 return 回傳結果,是 JavaScript 基礎語法中最重要的組織方式之一。
函式宣告怎麼寫
函式宣告由 function、函式名稱、小括號與大括號組成。把會重複出現的程式碼放進函式,可以降低複製貼上的錯誤。
function sayHello() { console.log("你好,歡迎學 JavaScript"); }
sayHello();
參數與回傳值
參數是函式接收的資料,回傳值是函式算完後交回來的結果。初學者要分清楚:console.log() 只是顯示資料,return 才是把結果交出去。
function addPrice(price, fee) { return price + fee; }
const total = addPrice(1000, 80); console.log(total);
傳統函式與箭頭函式入門差異
箭頭函式是現代 JavaScript 常見寫法,適合寫較短的函式或事件處理。入門階段先會讀、會寫基本形式即可,不需要急著處理更深入的行為差異。
function double(number) { return number * 2; }
const doubleAgain = (number) => { return number * 2; };
迴圈、陣列方法與物件基本操作
迴圈用來重複執行程式碼,陣列方法用來處理多筆資料,物件屬性則用來讀取或更新一筆資料的細節。只要開始做清單、選單、文章卡片,就會用到它們。
for 與 while 基本用法
for 適合知道要跑幾次的情境,while 適合依條件持續執行。初學者可先把 for 練熟,因為它在處理陣列時最直覺。
const items = ["首頁", "文章", "聯絡"];
for (let i = 0; i < items.length; i++) { console.log(items[i]); }
forEach 與 map 入門
forEach 適合逐筆執行動作,map 適合把原本的陣列轉成新的陣列。兩者都常見,但目的不同,不能只因為語法短就混用。
const prices = [100, 200, 300];prices.forEach((price) => { console.log(price); });
const discountedPrices = prices.map((price) => { return price * 0.9; });
console.log(discountedPrices);
讀取與更新物件屬性
物件適合描述一筆有多個屬性的資料,例如文章標題、作者、年份。讀取屬性可用點記法,更新時直接指定新的值。
const post = { title: "CSS Flexbox 教學", author: "陳建宏", views: 0 };post.views = post.views + 1;
console.log(post.title); console.log(post.views);
DOM 操作:選取元素、修改內容與樣式
DOM 是瀏覽器把 HTML 轉成可被 JavaScript 操作的文件結構。透過 DOM,JavaScript 可以選取元素、修改文字、插入 HTML、切換 class、調整樣式。
| 任務 | 常用寫法 | 用途 |
|---|---|---|
| 選取元素 | document.querySelector() |
取得第一個符合條件的元素 |
| 修改文字 | textContent |
安全地改純文字 |
| 插入 HTML | innerHTML |
需要產生標籤時使用 |
| 切換 class | classList |
控制樣式狀態 |
| 修改行內樣式 | style |
少量即時樣式調整 |
DOM 是什麼
DOM 代表 HTML 文件在瀏覽器中的結構。你看到的是網頁畫面,JavaScript 操作的是 DOM 節點。這也是為什麼 HTML 還沒出現時就選元素,會得到 null。
用 querySelector() 選元素
querySelector() 可以用 CSS 選擇器選取元素,例如 ID、class 或標籤名稱。實作網站時,我通常會替重要互動元素加上清楚的 class 或 ID,避免選到錯的元素。
<h2 class="page-title">原本標題</h2>
<script> const pageTitle = document.querySelector(“.page-title”); console.log(pageTitle); </script>
修改文字、HTML、CSS class
修改純文字用 textContent,切換樣式狀態用 classList。少量樣式可用 style,但大量視覺變化通常交給 CSS class 比較乾淨。
<p id="status">尚未啟用</p><script> const statusText = document.querySelector(“#status”);
statusText.textContent = “已啟用”; statusText.classList.add(“is-active”); statusText.style.color = “green”; </script>
textContent 與 innerHTML 什麼時候用
只要是單純改文字,優先用 textContent。只有在你確定需要產生 HTML 標籤時,才使用 innerHTML。這個判斷很重要,因為 innerHTML 若處理不可信內容,容易讓頁面暴露風險。
事件處理:click、input、submit 怎麼綁定
事件處理是讓使用者操作觸發 JavaScript 的方式。常見事件包含 click、input、submit,通常用 addEventListener() 綁定指定函式。
addEventListener() 基本寫法
addEventListener() 需要事件名稱與要執行的函式。寫事件時,可以照著「選元素、綁事件、更新畫面、用 Console 驗證」這個流程走。
const button = document.querySelector("#button");
button.addEventListener(“click”, () => { console.log(“按鈕被點擊了”); });
點擊按鈕改變文字
這是最適合新手的第一個 DOM 事件練習,因為可以清楚看到點擊後畫面改變。若按了沒有反應,先檢查按鈕是否選得到,再看 Console 有沒有錯誤訊息。
<button id="changeButton">改變文字</button> <p id="result">等待點擊</p><script> const changeButton = document.querySelector(“#changeButton”); const result = document.querySelector(“#result”);
changeButton.addEventListener(“click”, () => { result.textContent = “文字已經被 JavaScript 更新”; }); </script>
表單輸入即時顯示結果
input 事件會在使用者輸入時觸發,適合做即時預覽、字數提示、簡單搜尋。下面範例會把輸入內容同步顯示到段落中。
<input id="keyword" type="text" placeholder="輸入關鍵字"> <p id="preview">尚未輸入</p><script> const keyword = document.querySelector(“#keyword”); const preview = document.querySelector(“#preview”);
keyword.addEventListener(“input”, (event) => { preview.textContent = event.target.value; }); </script>
JavaScript 入門實作:做一個簡單網頁時鐘
網頁時鐘可以把變數、函式、DOM、時間物件與定時更新串在一起。這個練習不大,但能看出 JavaScript 如何把資料轉成畫面上的即時內容。
HTML 結構
先準備一個顯示時間的元素。結構越單純,越能專心看 JavaScript 的流程。
<div class="clock-box">
<p>目前時間</p>
<strong id="clock">--:--:--</strong>
</div>
JavaScript 更新時間
使用 Date 取得目前時間,再把小時、分鐘、秒數組成字串,最後寫回 DOM。這裡的重點是把「算資料」和「改畫面」放進同一個函式。
const clock = document.querySelector("#clock");function updateClock() { const now = new Date(); const hours = String(now.getHours()).padStart(2, “0”); const minutes = String(now.getMinutes()).padStart(2, “0”); const seconds = String(now.getSeconds()).padStart(2, “0”);
clock.textContent =
${hours}:${minutes}:${seconds}; }
updateClock();
每秒自動刷新畫面
setInterval() 可以每隔指定時間執行一次函式。時間單位是毫秒,所以每秒更新一次要填入 1000。
const clock = document.querySelector("#clock");function updateClock() { const now = new Date(); const timeText = now.toLocaleTimeString(“zh-TW”); clock.textContent = timeText; }
updateClock(); setInterval(updateClock, 1000);
延伸練習:改成倒數計時器
做完時鐘後,可以改成倒數計時器:準備一個目標時間,用目前時間相減,算出剩餘秒數,再更新畫面。這個練習會用到變數、函式、條件判斷與 DOM 更新,很適合當第一個小作品。
初學者常見錯誤與除錯流程
JavaScript 沒反應時,先看 Console 錯誤,再確認 JS 檔案有載入、元素是否選得到、事件是否成功綁定、大小寫與拼字是否正確。不要只盯著畫面猜原因。
先看 Console 錯誤
瀏覽器開發者工具的 Console 會顯示錯誤訊息與行號。初學者常忽略這一步,但它通常已經把問題位置指出來了。先讀錯誤,再改程式碼,會比重寫一整段有效。
確認 JS 檔案有載入
外部 JS 沒載入時,頁面不會有互動。可以先在檔案第一行加上 console.log("main.js loaded"),重新整理後看 Console 是否出現文字。
console.log("main.js loaded");
確認元素已存在再選取
如果 querySelector() 回傳 null,通常是選擇器寫錯,或 JavaScript 執行時 HTML 元素還沒出現。把 <script> 放在元素後面,是最直覺的處理方式。
常見拼字與大小寫錯誤
addEventListener、querySelector、textContent 都要注意大小寫。JavaScript 對大小寫敏感,少一個字母或大小寫錯了,就可能讓程式停止執行。
學完基礎後,JavaScript 下一步該學什麼
學完 JavaScript 基礎後,下一步應該先練 DOM、事件與小專案,再理解現代語法、API 串接與非同步概念。不要急著跳到大型工具,先做出能互動的網頁。
| 階段 | 要學的內容 | 練習方向 |
|---|---|---|
| 基礎語法 | 變數、函式、條件、迴圈 | 寫計算、判斷、資料整理練習 |
| DOM 與事件 | querySelector、classList、addEventListener | 按鈕互動、表單提示、內容切換 |
| 小專案 | Date、setInterval、陣列資料 | 時鐘、待辦清單、字數計算器 |
| 資料串接 | Fetch、Promise、async/await | 理解 API 回傳資料怎麼顯示到頁面 |
| 進階方向 | 框架或後端環境 | 等基礎和 DOM 觀念穩定後再選方向 |
現代 JavaScript 至少要知道哪些語法
現代入門至少要知道 let、const、箭頭函式、模板字串、陣列方法與物件基本操作。這些語法會頻繁出現在範例和真實網站中。
非同步 JavaScript 只先理解用途
非同步常用在向伺服器取得資料,例如讀取文章列表、提交表單、載入外部資料。初學者先知道它解決「等待資料回來」的問題即可,不需要一開始就鑽進完整細節。
什麼時候再學 React、Vue 或 Node.js
等你能用 Vanilla JavaScript 做出按鈕互動、表單驗證、內容切換、小型專案後,再考慮學框架或伺服器端環境。過早跳進工具,常會讓真正的基礎問題被包起來,看似會做,其實不會修。
JavaScript 教學常見問題
JavaScript 入門常見問題多半集中在語言差異、HTML/CSS 前置能力、script 放置位置、DOM 觀念、事件沒反應與下一步學習順序。先把這些問題釐清,練習會順很多。
JavaScript 和 Java 一樣嗎?
不一樣。JavaScript 和 Java 是不同語言,語法、用途與執行環境都不同。學網頁互動時,重點是 JavaScript,因為瀏覽器可以直接執行它,用來操作 DOM、處理事件與更新畫面。
學 JavaScript 前一定要先會 HTML/CSS 嗎?
建議先會基本 HTML 和 CSS。JavaScript 常要選取 HTML 元素、修改文字、切換 class,如果完全不懂 HTML/CSS,會很難理解程式碼最後影響的是哪個畫面位置。
JavaScript 要寫在 HTML 的 head 還是 body?
初學時建議把 <script> 放在需要操作的 HTML 元素後面,通常接近 </body> 前。這樣 JavaScript 執行時,元素已經存在,比較不容易選不到 DOM。
let、const、var 差在哪?
const 不能重新指定,適合大多數資料;let 可以重新指定,適合會變動的值;var 是舊寫法,新手不建議當成預設。日常寫法可先用 const,需要改值再用 let。
DOM 是什麼?為什麼 JavaScript 要操作 DOM?
DOM 是瀏覽器把 HTML 轉成可操作的文件結構。JavaScript 透過 DOM 才能選取元素、改文字、切換樣式、綁定事件。沒有 DOM,JavaScript 就很難影響使用者看見的頁面。
為什麼我點按鈕沒有反應?
先打開 Console 看錯誤,再檢查按鈕選擇器是否正確、JS 檔案是否載入、事件名稱是否拼對、程式是否在元素出現前就執行。多數按鈕沒反應,都能從這幾項找到原因。
console.log() 和 alert() 差在哪?
console.log() 會把資料顯示在開發者工具 Console,適合除錯;alert() 會跳出視窗,會打斷使用者操作。實作時通常用 console.log() 檢查,用 DOM 更新畫面。
初學者需要先學 async/await 嗎?
不需要一開始就深入。先理解 async/await 常用在等待資料回來,例如 API 串接。等變數、函式、DOM、事件都能順手使用後,再學非同步會比較容易接上實際情境。
JavaScript 大概要學多久才算入門?
沒有固定天數。能看懂變數、函式、條件判斷、陣列、物件,並用 DOM 和事件做出按鈕互動、表單提示、小型時鐘,就可以算具備入門能力。重點是可實作,不是看完多少章節。
可以只用 JavaScript 做完整網站嗎?
可以做出很多互動,但完整網站仍需要 HTML 負責結構、CSS 負責樣式。JavaScript 最適合處理行為與資料變化。對初學者來說,三者一起練,會比只盯著 JavaScript 更實際。
瀏覽器關掉 JavaScript 會怎樣?
如果瀏覽器停用 JavaScript,依賴它的互動功能可能失效,例如按鈕切換、表單即時提示、動態載入內容。基本 HTML 內容仍可能顯示,但互動體驗會大幅受限。
CSS Flexbox 教學:彈性盒子屬性、範例與常見問題
學會 css flexbox 的核心概念、display flex、主軸與交叉軸、justify-content、align-items、gap 與 flex 屬性用法,搭配 flexbox 教學範例、常見排版陷阱與除錯清單,判斷何時該用彈性盒子完成導覽列、卡片與表單排列。
CSS Grid 是什麼?網頁版面配置語法、切版範例與 Flexbox 判斷
css grid 是建立欄與列的 CSS Grid 版面配置工具,適合網站骨架、dashboard、卡片列表與設計稿切版。掌握 display: grid、grid-template-columns、gap 與 Grid / Flexbox 選用邏輯,能更穩定完成複雜網頁排版。
css教學入門:從選擇器與基本語法學會網頁顏色、字型和版面設定
css教學新手先掌握 CSS 基本語法、選擇器、屬性與屬性值,再練習設定文字顏色、字型、間距、背景和基礎版面,理解 HTML、CSS、JavaScript 的分工,寫出可閱讀又好維護的網頁樣式。