EP.01
JavaScript 入門系列

在學 React 之前,
你必須懂的 JavaScript

變數、函式、陣列、物件——React 程式碼裡最常用的四樣東西,一次全部搞懂,從此看 React 程式碼不再霧煞煞

J

Joseph Chen

2026·JavaScript 入門系列·8 min read·EP.01
JavaScript
基礎
React 前置知識

「我想學 React,打開教學影片,看到第一行程式碼:const [count, setCount] = useState(0)—— 這是什麼?const 後面有中括號、等號、括號…我完全看不懂。」

— 幾乎每個第一次學 React 的人,都有這個時刻

這篇文章的目標很簡單:把 React 程式碼裡最高頻率出現的四個 JavaScript 概念講清楚。 學完這篇,你再打開 React 教學,至少不會在語法上卡關。

📦

變數

const / let

⚙️

函式

function

📋

陣列

.map() .filter()

🗂️

物件

{ key: value }

1

變數——有名字的盒子

最直觀的比喻:變數就像一個有名字的盒子。你把一個值放進去,之後只要叫那個盒子的名字,就能把值取出來。

const — 裝了就不能換

就像一個密封的盒子——放進去之後,蓋子就焊死了,不能再換內容物。React 裡絕大多數變數都用 const

let — 可以換內容

就像一個普通盒子——你可以把裡面的東西換掉。計數器、迴圈變數才需要用 let

variables.js
// const:裝了不能換(最常用)
const name = 'Joseph';
const age = 26;
const isLoggedIn = true;

// let:可以重新賦值
let count = 0;
count = count + 1;  // ✅ 可以,count 現在是 1

// name = 'Mary';   // ❌ 錯誤!const 不能重新賦值
// const x;         // ❌ 錯誤!const 宣告時一定要給值

// 三種基本型別
const myString = 'Hello';   // 字串
const myNumber = 42;         // 數字
const myBoolean = true;      // 布林(true 或 false)

TIP

為什麼 React 幾乎都用 const?
React 的資料流是「單向的」——你不會直接修改一個變數,而是呼叫像 setState 這樣的函式來更新狀態。所以大部分的變數設定之後就不需要再換,const 剛好符合這個需求,也讓程式碼更容易讀懂:「看到 const,就知道這個值不會被修改。」
2

函式——把東西丟進去、出來成品

函式就像一台機器:你把原料(輸入)丟進去,機器處理完,吐出成品(輸出)。 同一台機器可以重複使用,只要原料不同,成品也不同。

在 JavaScript 裡,函式由三個部分組成:

參數(Parameters)

函式的「輸入口」,放在小括號裡,可以有多個,也可以沒有

函式體(Body)

大括號 {} 裡面是「機器的運作邏輯」,寫你要做什麼事

return

「成品出口」,把結果傳回給呼叫方。沒有 return 的函式回傳 undefined

functions.js
// 函式:接收輸入,處理後產生輸出
function greet(name) {           // name 是「參數」(輸入)
  return '你好,' + name + '!'; // return 是「輸出」
}

const result = greet('Joseph');
console.log(result);  // 你好,Joseph!

// 可以有多個參數
function add(a, b) {
  return a + b;
}
console.log(add(3, 5));  // 8

// 沒有 return → 回傳 undefined
function sayHello(name) {
  console.log('Hello ' + name);  // 只做事,不回傳值
}
const val = sayHello('Mary');
console.log(val);  // undefined

React Component 就是函式!

這是最重要的觀念:一個 React Component 就是一個「接收 props、回傳 UI」的函式。 你現在看到的每一個 React Component,都是這個模式。

MyButton.jsx
// React Component 就是函式!
// 輸入(props)→ 處理 → 輸出(UI / JSX)
function MyButton() {
  return <button>點我</button>;
}

// 有 props 的 Component
function Greeting({ name }) {     // 參數是 props
  return <h1>你好,{name}</h1>; // 回傳 JSX(UI)
}

// 使用方法和一般函式呼叫很像
// 差別是用「標籤」語法
// <Greeting name="Joseph" />
3

陣列——有順序的清單(React 最愛用)

陣列就像一張購物清單——按順序列出一堆東西,用數字索引(從 0 開始)存取每一項。 在 React 裡,你幾乎天天都在用陣列——因為資料通常是「一筆一筆」的,你需要把這些資料「渲染」成 UI。

arrays-basics.js
// 建立陣列(用中括號)
const fruits = ['蘋果', '香蕉', '芒果'];

// 用索引存取(從 0 開始!)
console.log(fruits[0]);  // '蘋果'
console.log(fruits[1]);  // '香蕉'
console.log(fruits[2]);  // '芒果'

// 取得長度
console.log(fruits.length);  // 3

陣列有幾個內建方法,在 React 裡非常高頻率出現——其中 .map() 是最最最重要的一個:

array-methods.js
const fruits = ['蘋果', '香蕉', '芒果'];

// .map():把每個元素「變換」成新的東西
// 傳入一個函式,針對每個元素執行,回傳「新陣列」
const tagged = fruits.map(fruit => fruit + ' 🍴');
console.log(tagged);  // ['蘋果 🍴', '香蕉 🍴', '芒果 🍴']
// 原本的 fruits 不變!.map() 永遠回傳新陣列

// .filter():篩選符合條件的元素,回傳「新陣列」
const numbers = [1, 2, 3, 4, 5, 6];
const evens = numbers.filter(n => n % 2 === 0);
console.log(evens);  // [2, 4, 6]

// .find():找到「第一個」符合條件的元素
// 找到就回傳那個元素,找不到就回傳 undefined
const found = fruits.find(fruit => fruit === '香蕉');
console.log(found);  // '香蕉'

const notFound = fruits.find(fruit => fruit === '西瓜');
console.log(notFound);  // undefined

.map() 在 React 裡的樣子

React 用 .map() 把資料陣列轉換成 UI 元素——這是 React 列表渲染的標準寫法,你在每個 React 專案都會看到。

PostList.jsx
const posts = ['文章一', '文章二', '文章三'];

function PostList() {
  return (
    <div>
      {posts.map((post, index) => (
        // key 是 React 要求的:讓 React 知道哪筆資料變了
        // 實際專案通常用資料的唯一 ID,而不是 index
        <p key={index}>{post}</p>
      ))}
    </div>
  );
}

// React 看到 posts.map(...),會自動渲染出:
// <p>文章一</p>
// <p>文章二</p>
// <p>文章三</p>

INFO

為什麼需要 key?
React 在更新畫面時,會比對「更新前」和「更新後」的 UI 差異,只更新有改變的部分(這是 Virtual DOM 的概念)。key 就是幫每個列表項目貼一個「識別標籤」,讓 React 知道「這個項目是同一個」還是「換了一個新的」,避免不必要的重新渲染。
4

物件——把相關資料整合在一起

物件就像一張名片——上面有名字、電話、公司、職稱。這些資料都屬於「同一個人」,用物件把它們包在一起,比分開放成多個變數好管理得多。

物件用大括號 {} 建立,裡面放「鍵值對」(key-value pair)——鍵名: 值

objects.js
// 物件:把相關資料組合在一起
const user = {
  name: 'Joseph',        // 字串
  age: 26,               // 數字
  isAdmin: false,        // 布林
  address: {             // 巢狀物件!物件裡面可以再放物件
    city: '高雄',
    country: '台灣',
  }
};

// 兩種存取屬性的方式
console.log(user.name);           // 'Joseph'(點記法,最常用)
console.log(user['age']);         // 26(中括號記法)

// 巢狀物件用點記法一層層往下
console.log(user.address.city);   // '高雄'

// 修改屬性的值(物件是 const,但裡面的屬性可以改)
user.age = 27;                    // ✅ 可以
console.log(user.age);            // 27

React 裡最常見的物件用法:style

StyledButton.jsx
// React 裡的 style 屬性要傳入一個「物件」
// 注意:CSS 的 background-color 在這裡要寫成 backgroundColor(camelCase)
const buttonStyle = {
  backgroundColor: 'royalblue',
  color: 'white',
  padding: '10px 20px',
  borderRadius: '8px',
  border: 'none',
  cursor: 'pointer',
};

function StyledButton() {
  return <button style={buttonStyle}>點我</button>;
}

// 也可以直接寫在 JSX 裡(兩層大括號:外層是 JSX 表達式,內層是物件)
function InlineButton() {
  return (
    <button style={{ backgroundColor: 'coral', color: 'white', padding: '8px 16px' }}>
      內嵌樣式
    </button>
  );
}
5

綜合練習——把四個概念串起來

理解了四個概念之後,我們來做一個簡單的書籍清單組件,把所有東西串在一起。 注意看這段程式碼用到了哪些你剛學到的東西:

BookList.jsx
// 1. 用「物件陣列」存資料
//    每一本書是一個物件,所有書放在一個陣列
const books = [
  { id: 1, title: 'Clean Code',        author: 'Robert Martin', price: 650 },
  { id: 2, title: "You Don't Know JS", author: 'Kyle Simpson',  price: 450 },
  { id: 3, title: 'Design Patterns',   author: 'GoF',           price: 800 },
];

// 2. 用「函式」建立 Component
//    接收一本書的物件作為 props,回傳 UI
function BookCard({ book }) {     // ← 參數是物件,下一篇會教解構賦值
  return (
    <div style={{ border: '1px solid #eee', padding: '16px', margin: '8px', borderRadius: '8px' }}>
      <h3 style={{ margin: 0 }}>{book.title}</h3>
      <p style={{ color: '#666' }}>作者:{book.author}</p>
      <p style={{ fontWeight: 'bold', color: '#e55' }}>NT${book.price}</p>
    </div>
  );
}

// 3. 用「.map()」把資料陣列轉成 UI
//    每本書呼叫一次 BookCard,key 用 book.id(唯一識別)
function BookList() {
  return (
    <div>
      <h2>書單</h2>
      {books.map(book => (
        <BookCard key={book.id} book={book} />
      ))}
    </div>
  );
}

// BookList 渲染出來大概長這樣:
// <div>
//   <h2>書單</h2>
//   <div>Clean Code — Robert Martin — NT$650</div>
//   <div>You Don't Know JS — Kyle Simpson — NT$450</div>
//   <div>Design Patterns — GoF — NT$800</div>
// </div>

TIP

思考一下:如果書單有 1000 本書,你要改什麼嗎?
答案是不需要——只要 books 陣列有 1000 筆資料,.map() 就會自動渲染出 1000 個卡片。這就是「資料驅動 UI」的概念,React 最核心的精神。

核心重點整理

const / let

變數:存資料用。const 裝了不能換(React 常用),let 可以重新賦值

函式

輸入→輸出的機器。React Component 就是「接收 props、回傳 UI」的函式

陣列 + .map()

React 列表渲染的核心。.map() 把資料陣列變成 UI 元素陣列

物件

把相關資料組合成一個單位。props、style、API 回傳值都是物件

物件陣列

真實資料幾乎都是「物件的陣列」,搭配 .map() 就是 React 的日常

下一篇預告

現在你懂了四個基本概念。但打開 React 程式碼,你還是會看到很多「怪」語法——const { name, age } = user(a, b) => a + b...spread……

這些是 ES6+ 的現代語法——下一篇六個語法一次全部搞定,讀完你就能看懂 99% 的 React 程式碼。

JavaScript
基礎
陣列
物件
函式
React 前置知識
入門
const
map