JavaScript 採用**動態弱型別**:
var(函式作用域、可重複宣告)、let/const(區塊作用域、暫時性死區)是現代標準。typeof 30 // "number"、typeof "str" // "string"。[] + {} // "[object Object]"、[] == ![] // true。嚴格相等 === 避免轉型,建議**永久使用 ===/!==**。// 短路求值技巧
var user = getUser() || { name: "Guest" }; // 預設值
var isAdmin = user.role === "admin" && user.active; // 守衛條件
function createCounter() {
var count = 0; // 被閉包捕獲
return function() { return ++count; };
}
var counterA = createCounter();
counterA(); // 1
counterA(); // 2
閉包讓內部函式「記住」外部詞法環境,是模組模式、柯里化、中介軟體的基石。
| 操作 | ES5 | ES6+ |
|---|---|---|
| 遍歷 | arr.forEach(fn) | for (const v of arr) |
| 映射 | arr.map(fn) | 同左 |
| 過濾 | arr.filter(fn) | 同左 |
| 合併物件 | $.extend({}, o1, o2) | {...o1, ...o2} |
| 屬性簡寫 | var o = { x: x } | const o = { x } |
// 現代選取 API
const btn = document.querySelector("#submit");
const items = document.querySelectorAll(".item");
// 事件委派(效能優於逐個綁定)
document.body.addEventListener("click", e => {
if (e.target.matches(".delete-btn")) {
e.target.closest("li").remove();
}
});
XMLHttpRequest(原生、繁瑣)$.ajax(簡化、Promise 化)fetch API(原生 Promise、串流支援)axios/ky(攔截器、自動 JSON、TypeScript 支援)// fetch 範例
async function loadData() {
const res = await fetch("/api/data");
if (!res.ok) throw new Error(res.statusText);
return res.json();
}