~/VibeHandbook
PDF miễn phí

Ngôn ngữ

developer.mozilla.org

JavaScript

Đây là gì

JavaScript là ngôn ngữ của web. Đây là ngôn ngữ duy nhất chạy được sẵn (native) trên mọi trình duyệt. Thông qua Node, Deno và Bun, nó cũng chạy được trên máy chủ (server), nên bạn có thể xây dựng cả một ứng dụng chỉ với ngôn ngữ này. Nó chỉ kiểm tra dữ liệu của bạn trong lúc chương trình đang chạy, chứ không kiểm tra trước — giống như viết một công thức nấu ăn mà không có danh sách nguyên liệu để đối chiếu trước, nên chỉ khi nấu đến giữa chừng bạn mới phát hiện ra thiếu nguyên liệu nào đó (điều này được gọi là "dynamically typed" — định kiểu động). JavaScript cũng là ngôn ngữ hướng sự kiện (event-driven) và có mặt ở khắp mọi nơi, điều này khiến nó trở thành ngôn ngữ lập trình được sử dụng rộng rãi nhất thế giới.

Điểm mạnh

  • Chạy được ở mọi nơi: trình duyệt, máy chủ, function (hàm chạy ở các điểm mạng gần người dùng), thậm chí cả trong hệ thống nhúng.
  • Không cần bước biên dịch (compile); chỉnh sửa rồi tải lại trang là thấy kết quả ngay lập tức.
  • Hệ sinh thái npm (Node Manager — trình quản lý gói của Node) khổng lồ cùng một cộng đồng rất lớn.
  • Hỗ trợ xử lý bất đồng bộ (async) hạng nhất với promise và async/await.

Đánh đổi

  • Không có kiểu dữ liệu tĩnh (static types) — nhiều lỗi chỉ xuất hiện khi chương trình đang chạy (runtime).
  • Những "vết sẹo" lịch sử: so sánh lỏng lẻo (==), cách gán this, việc ép kiểu ngầm định (implicit coercion).
  • Rất dễ tạo ra một mớ callback lộn xộn hoặc phụ thuộc chồng chéo nếu không có kỷ luật khi viết code.
  • Việc dùng cùng một ngôn ngữ cho cả lẫn có thể làm mờ ranh giới kiến trúc giữa hai phần.

Khi nào nên dùng

Hãy chọn JavaScript thuần cho các đoạn script nhanh, dự án nhỏ, mục đích học tập, bản dựng thử nghiệm (prototype), hoặc những môi trường mà việc thêm một bước build không đáng công sức. Với những dự án lớn hơn hoặc tồn tại lâu dài, hầu hết các nhóm sẽ chọn TypeScript thay thế — nhưng JS vẫn là cách nhanh nhất để cho một thứ gì đó chạy được trên trình duyệt hoặc trong một công cụ Node nhỏ.

Mức độ phù hợp với vibe coding

Các trợ lý AI xử lý JavaScript rất trôi chảy, nhưng vì thiếu kiểu dữ liệu nên code do AI sinh ra có thể ngầm giả định sai hình dạng dữ liệu (data shape) mà không báo lỗi. Hãy yêu cầu AI dùng cú pháp hiện đại (const/let, arrow function, async/await, module) và phép so sánh chặt chẽ (strict equality), đồng thời nhờ AI thêm các kiểm tra phòng vệ (defensive checks) hoặc chú thích JSDoc ở những chỗ hình dạng dữ liệu quan trọng. Hãy nói rõ môi trường bạn đang dùng — trình duyệt hay Node, ESM hay CommonJS — để các câu lệnh import chính xác. Vì không có trình biên dịch để dựa vào, hãy yêu cầu AI đưa ra một ví dụ nhỏ có thể chạy được hoặc một bài test để bạn có thể tự kiểm chứng hành vi của code.

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);