JavaScript là ngôn ngữ của web
JavaScript là ngôn ngữ lập trình chạy bên trong trình duyệt web. Khi một trang phản hồi cú nhấp chuột, kiểm tra biểu mẫu, tạo hiệu ứng cho menu hay tải nội dung mới mà không cần tải lại, đó chính là JavaScript. Mọi trình duyệt trên mọi thiết bị đều tích hợp sẵn một JavaScript engine, khiến nó trở thành ngôn ngữ duy nhất chạy trực tiếp trên web.
Giờ đây nó cũng chạy bên ngoài trình duyệt. Node.js, Deno và Bun cho phép bạn dùng JavaScript cho máy chủ, công cụ dòng lệnh, script build và API. Cùng một ngôn ngữ chạy cả frontend lẫn backend, đó là một phần lớn lý do nó được dùng rộng rãi đến vậy.
Một chút hương vị về JavaScript trông như thế nào:
Ba dòng, ba ý: khai báo một biến, gọi một hàm có sẵn, in ra một chuỗi template. Bạn sẽ thấy cả ba điều này trên mọi trang code JavaScript thực tế.
JavaScript chạy ở đâu
Bản thân JavaScript chỉ là một đặc tả ngôn ngữ (gọi là ECMAScript). Để thực sự chạy nó, bạn cần một engine: chương trình đọc code của bạn và thực thi nó. Hai môi trường bạn sẽ gặp:
- Trình duyệt. Chrome và Edge dùng V8. Firefox dùng SpiderMonkey. Safari dùng JavaScriptCore. Mở một trang, nhấn F12 và dán JavaScript vào tab Console: nó chạy ngay lập tức.
- Node.js. Đưa V8 ra khỏi trình duyệt và cho nó quyền truy cập hệ thống tệp, mạng và hệ điều hành. Đó là thứ giúp JavaScript phía máy chủ trở nên khả thi.
// Run in a browser console:
document.title = "New tab title";
// Run with Node.js:
// $ node script.js
JavaScript trên trình duyệt có thể thao tác với trang (DOM), nhưng không chạm được vào hệ thống tệp của bạn. JavaScript trên Node.js có thể đọc tệp và mở socket, nhưng không có trang nào để thao tác. Cùng một ngôn ngữ, khác siêu năng lực.
JavaScript dùng để làm gì
Câu trả lời ngắn: gần như mọi thứ liên quan đến web. Câu trả lời dài hơn, xếp gần theo thứ tự bạn sẽ gặp:
- Trang web tương tác. Kiểm tra biểu mẫu, menu thả xuống, hộp thoại, tìm kiếm trực tiếp, kéo và thả.
- Ứng dụng một trang (SPA). Gmail, Figma, Notion, Linear: toàn bộ ứng dụng được JavaScript hiển thị và cập nhật, thường thông qua một framework như React, Vue hoặc Svelte.
- Máy chủ backend. REST API, endpoint GraphQL và dịch vụ thời gian thực được xây dựng bằng Node.js, Express, Fastify hoặc NestJS.
- Công cụ build và phát triển. Bundler (Vite, esbuild, webpack), linter (ESLint), công cụ chạy test (Vitest, Jest).
- Ứng dụng đa nền tảng. Ứng dụng máy tính qua Electron (VS Code, Slack, Discord) và ứng dụng di động qua React Native.
Bạn không cần biết hết những điều này ngay ngày đầu. Chỉ cần biết chúng tồn tại để cụm từ "chỉ là JavaScript" không nghe có vẻ hạn chế.
JavaScript thực sự chạy như thế nào
Một mô hình rất đơn giản hóa: bạn viết mã nguồn, engine phân tích nó thành một dạng biểu diễn nội bộ, rồi thực thi. Các engine hiện đại dùng biên dịch JIT (just-in-time): chúng bắt đầu thông dịch thật nhanh, rồi tối ưu các đoạn code chạy nhiều thành mã máy trong lúc chương trình đang chạy.
Bạn không biên dịch JavaScript thành tệp nhị phân trước khi phát hành. Bạn đưa mã nguồn cho trình duyệt (hoặc Node) và engine lo phần còn lại:
Dán đoạn đó vào console của trình duyệt, hoặc lưu thành greet.js rồi chạy node greet.js: kết quả như nhau. Không có bước biên dịch, không cấu hình build, không cần cài đặt gì với đoạn code đơn giản như vậy.
JavaScript và Java
Tên nghe giống nhau nhưng chúng không hề giống nhau. JavaScript được đặt tên như vậy vào năm 1995 để tận dụng sự nổi tiếng của Java lúc đó: một quyết định tiếp thị khiến người mới bối rối từ đó đến nay.
| JavaScript | Java | |
|---|---|---|
| Kiểu dữ liệu | Động | Tĩnh |
| Chạy trên | Trình duyệt, Node.js | JVM |
| Mô hình lập trình | Đa mô hình, dựa trên prototype | Hướng đối tượng dựa trên lớp |
| Biên dịch | JIT, không cần bước build | Biên dịch sang bytecode trước |
Nếu ai đó nói với bạn "tôi đã học Java nên tôi biết JavaScript", thì không phải vậy. Hãy coi chúng là hai ngôn ngữ riêng biệt, chỉ tình cờ chung bốn chữ cái.
JavaScript và TypeScript
TypeScript là JavaScript được gắn thêm một hệ thống kiểu. Bạn viết code có chú thích kiểu, trình biên dịch TypeScript kiểm tra chúng, và đầu ra là JavaScript thuần chạy được ở bất cứ đâu JavaScript chạy được.
// JavaScript - types are implicit:
function add(a, b) {
return a + b;
}
// TypeScript - types are explicit:
function add(a: number, b: number): number {
return a + b;
}
Mọi tệp JavaScript hợp lệ đều là tệp TypeScript hợp lệ, nghĩa là TypeScript không phải đối thủ cạnh tranh mà là một tập cha (superset). Hầu hết các codebase lớn ngày nay dùng TypeScript, nhưng học JavaScript trước là thứ tự đúng. Bạn không thể hiểu TypeScript làm gì nếu chưa hiểu nó đang thêm kiểu vào cái gì.
Đôi nét lịch sử, để những điểm kỳ quặc trở nên dễ hiểu
JavaScript được Brendan Eich viết trong mười ngày vào năm 1995 tại Netscape. Nguồn gốc đó quan trọng vì một số điểm thô ráp của ngôn ngữ (so sánh bằng lỏng lẻo, tự động chèn dấu chấm phẩy, typeof null === "object") đến từ những quyết định được đưa ra dưới áp lực thời gian cực lớn, rồi bị giữ nguyên để web vẫn tương thích ngược.
Ngôn ngữ được chuẩn hóa dưới tên ECMAScript, và mỗi năm có một phiên bản mới (ES2015 là bản lớn nhất: let, const, arrow function, lớp, module). Khi ai đó nói "ES6" hay "JavaScript hiện đại", họ muốn nói đến bộ tính năng từ năm 2015 trở đi, giờ đã được hỗ trợ ở mọi nơi.
JavaScript hiện đại thực sự dễ chịu khi viết. Những phần cũ vẫn còn đó, nhưng bạn có thể tránh phần lớn chúng bằng các thói quen mà chúng ta sẽ đề cập xuyên suốt khóa học này.
Những điều cần nhớ
- JavaScript chạy trên mọi trình duyệt, và cả trên máy chủ nhờ Node.js.
- Nó được dùng cho gần như mọi thứ liên quan đến web: giao diện, backend, công cụ, thậm chí cả ứng dụng máy tính và di động.
- Nó không phải Java. TypeScript là một tập cha bổ sung kiểu tĩnh.
- Ngôn ngữ có một số điểm kỳ quặc do lịch sử; JavaScript hiện đại (ES2015 trở đi) là thứ bạn sẽ thực sự viết.
Tiếp theo: chạy JavaScript
Đủ bối cảnh rồi, đến lúc thực sự chạy code. Bài tiếp theo giới thiệu ba nơi bạn sẽ chạy JavaScript khi mới bắt đầu: console của trình duyệt, một tệp HTML và Node.js trên dòng lệnh.
Câu hỏi thường gặp
JavaScript là gì, giải thích đơn giản?
JavaScript là ngôn ngữ lập trình chạy bên trong trình duyệt web và trên máy chủ (thông qua Node.js). Nó là thứ giúp trang web có tính tương tác: phản hồi cú nhấp chuột, cập nhật trang mà không cần tải lại, lấy dữ liệu từ API. Đây là ngôn ngữ duy nhất chạy trực tiếp trên mọi trình duyệt.
JavaScript dùng để làm gì?
Mọi thứ, từ các tương tác giao diện nhỏ (menu thả xuống, kiểm tra biểu mẫu) đến ứng dụng web hoàn chỉnh (Gmail, Figma, Notion), máy chủ backend (Node.js, Deno), ứng dụng di động (React Native), ứng dụng máy tính (VS Code qua Electron) và công cụ build. Nếu thứ gì đó chạy trên trình duyệt hoặc giao tiếp với web, nhiều khả năng có JavaScript tham gia.
JavaScript có giống Java không?
Không. Đây là hai ngôn ngữ không liên quan, có tên giống nhau vì lý do tiếp thị trong lịch sử. Java là ngôn ngữ kiểu tĩnh, dựa trên lớp, chạy trên JVM. JavaScript là ngôn ngữ kiểu động, chạy trên trình duyệt và Node, với thiết kế rất khác. Thứ duy nhất chúng thực sự có chung là bốn chữ cái đầu.
JavaScript và TypeScript khác nhau thế nào?
TypeScript là JavaScript cộng thêm một hệ thống kiểu. Bạn viết code có chú thích kiểu, trình biên dịch kiểm tra chúng, và đầu ra là JavaScript thuần. Mọi tệp JavaScript hợp lệ cũng là TypeScript hợp lệ. Bạn không cần TypeScript để học JavaScript, nhưng hầu hết các codebase lớn ngày nay đều dùng nó.