JavaScript
是什麼
JavaScript 是 web 的語言。它是唯一能在每個瀏覽器中原生執行的語言。通過 Node、Deno 和 Bun,它也能在伺服器上執行,所以僅用它就能構建一個完整的應用。它不會事先檢查資料,只在程式執行時才檢查——就像寫菜譜時沒有食材清單,少了哪樣東西要等做到一半才發現(這叫"動態型別")。它還是事件驅動的,而且無處不在,因而成為全世界使用最廣泛的程式語言。
優勢
- 處處可執行:瀏覽器、伺服器、邊緣函式,甚至嵌入式裝置。
- 無需編譯步驟;編輯後重新整理即可獲得即時反饋。
- 龐大的 npm(Node 包管理器)生態和巨大的社群。
- 一流的非同步支援,配合 promise 和
async/await。
取捨
- 沒有靜態型別——許多錯誤只有在執行時才暴露。
- 歷史遺留的小毛病:寬鬆相等(
==)、this繫結、隱式型別轉換。 - 缺乏紀律時很容易造成回撥或依賴的失控蔓延。
- 前後端同語言可能模糊架構邊界。
何時使用
對於快速指令碼、小專案、學習、原型,或不值得新增構建步驟的環境,可以選擇純 JavaScript。對於更大或更長期維護的專案,大多數團隊會轉向 TypeScript——但 JS 仍是讓東西在瀏覽器或小型 Node 工具中跑起來的最快方式。
與 vibe coding 的契合度
AI 助手能流暢地處理 JavaScript,但由於缺乏型別,生成的程式碼可能會悄無聲息地假設了錯誤的資料結構。引導 AI 使用現代語法(const/let、箭頭函式、async/await、模組)和嚴格相等,並在資料結構重要的地方讓它加上防禦性檢查或 JSDoc 註釋。說明你的執行環境——瀏覽器還是 Node、ESM 還是 CommonJS——以確保 import 正確。由於沒有編譯器可以依靠,讓它給出一個小的可執行示例或測試,以便你直接驗證行為。
const fetchTitle = async (url) => {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const html = await res.text();
return html.match(/<title>(.*?)<\/title>/i)?.[1] ?? "(no title)";
};
fetchTitle("https://example.com").then(console.log);