JavaScript 內建了許多現成的物件與方法,不必自己從頭寫。本篇整理最常用的五類:日期(Date)、數學(Math)、字串、陣列與 JSON。熟悉它們,可以省下大量重複的程式碼。
一、Date:日期與時間
const now = new Date(); // 現在的日期時間
console.log(now.getFullYear()); // 年,例如 2026
console.log(now.getMonth() + 1); // 月:回傳 0~11,所以要加 1
console.log(now.getDate()); // 日
console.log(now.getDay()); // 星期:0 是星期日,6 是星期六
console.log(now.toLocaleDateString('zh-TW')); // 依地區格式顯示日期
最容易出錯的是月份:getMonth() 的 0 代表一月。建立指定日期時也是同樣規則:
const newYear = new Date(2027, 0, 1); // 2027 年 1 月 1 日(月份寫 0)
計算兩個日期相差幾天
const d1 = new Date(2026, 10, 8); // 2026-11-08
const d2 = new Date(2027, 0, 1); // 2027-01-01
const days = Math.round((d2 - d1) / (1000 * 60 * 60 * 24));
console.log(days); // 54
兩個日期相減,得到的是毫秒數,再除以一天的毫秒數即可。使用 Math.round 是為了避開夏令時間造成的小誤差。
二、Math:數學運算
| 方法 | 說明 | 範例 |
|---|---|---|
Math.round(x) | 四捨五入 | Math.round(2.5) 得 3 |
Math.floor(x) | 無條件捨去 | Math.floor(2.9) 得 2 |
Math.ceil(x) | 無條件進位 | Math.ceil(2.1) 得 3 |
Math.max/min | 最大/最小值 | Math.max(3, 9, 5) 得 9 |
Math.random() | 0 到不含 1 的隨機小數 | 見下方 |
// 擲骰子:1~6 的隨機整數
const dice = Math.floor(Math.random() * 6) + 1;
// 陣列取最大值,用展開運算子
const scores = [78, 92, 65];
console.log(Math.max(...scores)); // 92
另外,(3.14159).toFixed(2) 可以指定小數位數,回傳的是字串 '3.14';(1234567).toLocaleString('zh-TW') 會加上千分位,得到 '1,234,567'。
三、字串常用方法
const s = ' Hello JavaScript ';
console.log(s.trim()); // 'Hello JavaScript'(去掉前後空白)
console.log(s.trim().length); // 16
console.log(s.includes('Java')); // true
console.log(s.trim().toUpperCase()); // 'HELLO JAVASCRIPT'
console.log(s.trim().slice(0, 5)); // 'Hello'
console.log(s.replace('Hello', 'Hi')); // ' Hi JavaScript '
console.log('a,b,c'.split(',')); // ['a', 'b', 'c']
console.log(String(5).padStart(2, '0')); // '05',常用於補零
字串是「不可變」的,這些方法都會回傳新字串,不會修改原本的字串。
四、陣列常用方法
| 方法 | 用途 |
|---|---|
map | 把每個元素轉換,得到新陣列 |
filter | 篩選符合條件的元素 |
find | 找出第一個符合條件的元素 |
reduce | 把所有元素合併成一個值(例如加總) |
sort | 排序(會直接修改原陣列) |
includes | 是否包含某個值 |
const scores = [78, 92, 65, 88, 95];
const doubled = scores.map(n => n * 2); // [156, 184, 130, 176, 190]
const passed = scores.filter(n => n >= 80); // [92, 88, 95]
const first = scores.find(n => n < 70); // 65
const sum = scores.reduce((total, n) => total + n, 0); // 418
// sort 預設是依「字串」比較,數字一定要給比較函式
const desc = [...scores].sort((a, b) => b - a); // [95, 92, 88, 78, 65]
注意:sort 會直接改變原陣列,所以上面先用 [...scores] 複製一份再排序。如果寫成 [10, 9, 100].sort(),結果會是 [10, 100, 9],這是新手常見的陷阱。
五、JSON:資料與字串互轉
const user = { name: '小明', age: 20, tags: ['學生', '社團'] };
const text = JSON.stringify(user); // 物件 → JSON 字串
const back = JSON.parse(text); // JSON 字串 → 物件
console.log(back.name); // '小明'
JSON.parse 遇到格式錯誤的字串會拋出錯誤,不確定來源時要用 try...catch 包起來(下一篇會介紹)。JSON 的字串一律要用雙引號,且不能有結尾逗號。
六、綜合範例:成績統計
const scores = [78, 92, 65, 88, 95];
const total = scores.reduce((t, n) => t + n, 0);
const avg = total / scores.length;
const best = Math.max(...scores);
const worst = Math.min(...scores);
const passCount = scores.filter(n => n >= 60).length;
console.log('平均:' + avg.toFixed(1)); // 平均:83.6
console.log('最高:' + best + ',最低:' + worst); // 最高:95,最低:65
console.log('及格人數:' + passCount); // 及格人數:5
七、練習題
- 顯示「今天是 2026 年 11 月 8 日 星期日」格式的日期(要把
getDay()的數字轉成中文星期)。 - 算出你的生日還有幾天,若今年已過,改算明年。
- 有一個價格陣列
[120, 45, 300, 80],找出大於 100 的價格,並算出它們的總和。 - 把
['b', 'a', 'c']排序後轉成 JSON 字串。
結語
這些內建物件是日常程式的基本工具,先熟悉用途,需要時再查細節即可。下一篇要學習如何處理錯誤與除錯,讓程式出問題時能快速找到原因。
沒有留言:
張貼留言