← Lập trình JavaScript cơ bản

Bài 1 · Cơ bản · 16 phút· Cập nhật 11/06/2026

JS chạy ở đâu & cài đặt

Biên soạn bởi Nguyễn Anh Tuấn

Học JavaScript từ đầu: JS chạy trong trình duyệt và Node.js (runtime), thử ngay với Console & REPL, viết chương trình đầu tiên; engine V8 và JIT là gì.

JavaScript ra đời năm 1995 với một nhiệm vụ duy nhất: làm cho trang web sống động (bấm nút, hiện/ẩn, kiểm tra biểu mẫu…). Suốt nhiều năm nó chỉ chạy bên trong trình duyệt. Đến năm 2009, Node.js mang JavaScript ra ngoài - chạy thẳng trên máy tính và máy chủ.

Ai tạo ra JavaScript?

JavaScript do Brendan Eich tạo ra khi đang làm tại Netscape năm 1995 - nổi tiếng vì ông dựng bản mẫu đầu tiên chỉ trong khoảng 10 ngày. Ban đầu nó tên “Mocha”, rồi “LiveScript”, cuối cùng mới thành “JavaScript”. Một ngôn ngữ ra đời vội vã mà nay chạy gần như khắp mọi trang web.

Khi học, bạn sẽ gặp hai môi trường chạy (runtime) chính:

Môi trườngChạy ở“Đồ nghề” riêng
Trình duyệtChrome, Firefox, Safari…DOM (sửa trang web), sự kiện chuột/bàn phím
Node.jsMáy tính / máy chủĐọc-ghi tệp, mở server, gọi mạng
  • JS sinh ra cho trình duyệt; từ 2009 chạy được cả ngoài trình duyệt nhờ Node.js.
  • Cùng một ngôn ngữ JavaScript, nhưng mỗi môi trường cho “đồ nghề” khác nhau.
  • Trình duyệt mạnh về DOM & sự kiện; Node mạnh về tệp, mạng, server.

Runtime (môi trường chạy) là gì?

Một runtime gồm engine (chạy ngôn ngữ JS) cộng thêm các thư viện sẵn có của môi trường đó. Trình duyệt cho bạn document, window; Node cho bạn fs (tệp), http (server)… Ngôn ngữ thì như nhau - chỉ “đồ nghề” xung quanh là khác.

Cách nhanh nhất để thử JavaScript là không cài gì cả. Mở DevTools (nhấn F12, hoặc chuột phải → “Inspect”), chọn tab Console rồi gõ:

gõ thẳng vào Console của trình duyệt

console.log("Xin chao, JavaScript!");

Kết quả khi chạy

Xin chao, JavaScript!

console.log(...) in một dòng ra Console. Để JavaScript chạy cùng một trang web, ta nhúng nó bằng thẻ <script>:

index.html - JS nhúng trong trang

<!doctype html>
<html>
  <body>
    <h1>Trang cua toi</h1>
    <script>
      console.log("JS dang chay trong trang nay!");
      // ngay ca sua noi dung trang - se hoc ky o bai DOM
      document.querySelector("h1").textContent = "Da doi boi JavaScript";
    </script>
  </body>
</html>
  • Console trong DevTools = phòng thí nghiệm: gõ một dòng, thấy kết quả ngay.
  • console.log(...) in ra Console; chuỗi đặt trong nháy "..." hoặc '...'.
  • Thẻ <script> nhúng JavaScript vào một trang HTML.

console.log hay alert?

alert("...") bật một hộp thoại chặn cả trang - chỉ hợp để thử cho vui. Lập trình viên dùng console.log(...) để in ra Console: gọn, không làm phiền người dùng, và in được nhiều giá trị cùng lúc.

Muốn chạy JavaScript như một chương trình thật trên máy (đọc tệp, dựng server…), bạn cần Node.js. Cài bản LTS (ổn định) theo hệ điều hành:

cài Node.js theo hệ điều hành

# Windows: tai bo cai LTS o nodejs.org (.msi),
#          hoac:  winget install OpenJS.NodeJS.LTS

# macOS:
brew install node          # hoac tai .pkg o nodejs.org

# Linux: khuyen dung nvm (quan nhieu phien ban) - xem callout ben duoi
#        ban apt co san nhung thuong cu hon

# Kiem tra (ca hai deu di kem Node):
node --version
npm --version

Tạo một tệp hello.js rồi chạy bằng lệnh node hello.js:

hello.js

// hello.js  - chay bang: node hello.js
console.log("Xin chao tu Node.js!");

Kết quả khi chạy

Xin chao tu Node.js!

Giống trình duyệt có Console, Node có REPL - môi trường tương tác để thử nhanh. Gõ node (không kèm tên tệp) là vào:

REPL của Node - thử nhanh không cần tạo tệp

$ node
Welcome to Node.js.
> 2 + 3
5
> "JavaScript".length
10
> .exit        // hoac Ctrl-D de thoat
  • Node.js = engine V8 + thư viện để chạy JS ngoài trình duyệt.
  • Cài kèm npm - trình quản lý gói (học kỹ ở bài “Module (ESM) & npm”).
  • node hello.js chạy cả một tệp; gõ node để vào REPL thử nhanh, .exit để thoát.

LTS, nvm, và các runtime khác

LTS (Long-Term Support) là bản được hỗ trợ lâu, ổn định - nên dùng để học. nvm (Node Version Manager) giúp cài & đổi qua lại nhiều phiên bản Node trên cùng máy - rất tiện khi mỗi dự án cần một phiên bản. Ngoài Node còn có DenoBun - các runtime mới hơn cho JavaScript; khoá này dùng Node.

Ta hay nói “JavaScript”, nhưng tên chuẩn của ngôn ngữ là ECMAScript - luật do uỷ ban TC39 (thuộc Ecma International) soạn, mỗi năm ra một bản (ES2015/ES6, ES2016, …). Mỗi engine là một implementation - một chương trình hiện thực đúng luật đó:

EngineCủaDùng trong
V8GoogleChrome, Edge, Node.js, Deno
SpiderMonkeyMozillaFirefox
JavaScriptCoreAppleSafari, Bun

Bên trong, engine không đọc thẳng từng dòng chữ. Nó đi qua vài chặng:

đường đi của một đoạn JS bên trong engine

ma nguon (.js)
   -> phan tich (parse)  -> cay cu phap (AST)
   -> bytecode           -> thong dich nhanh, chay duoc ngay
   -> JIT compile        -> nhung doan "nong" thanh MA MAY (rat nhanh)
  • “JavaScript” ≈ ECMAScript (chuẩn do TC39 soạn); engine là bản cài chạy chuẩn đó.
  • Một ngôn ngữ, nhiều engine: V8, SpiderMonkey, JavaScriptCore - code JS chạy được trên cả ba.
  • Engine biên dịch sang bytecode rồi JIT những phần “nóng” sang mã máy - không phải thông dịch thuần.

Trung thực

Đừng tin câu “JavaScript là ngôn ngữ thông dịch, chạy chậm”. Đúng là có lớp engine ở giữa (nên thường chậm hơn C), nhưng nhờ JIT mà JavaScript hiện đại nhanh hơn rất nhiều so với thời 1995 - đủ để chạy game, dựng server, xử lý dữ liệu lớn. Cơ chế chạy “nóng → mã máy” này rất giống điều bạn sẽ gặp lại ở các ngôn ngữ khác.

Chọn môi trường theo việc bạn muốn làm, không phải theo “cái nào xịn hơn” - cả hai chạy cùng ngôn ngữ:

  • Làm trang web tương tác (sửa giao diện, bắt sự kiện) → chạy trong TRÌNH DUYỆT.
  • Làm công cụ dòng lệnh, server, xử lý tệp → chạy bằng NODE.JS.
  • Học cú pháp thuần (biến, hàm, mảng…) → đâu cũng được; Console hoặc node REPL đều tiện.

Vài lỗi người mới hay vấp ngay từ bài đầu:

HOA/thường rất quan trọng

console.log("ok");    // dung -> in ra: ok
Console.log("loi");   // ReferenceError: Console is not defined  (C hoa la sai)
  • JavaScript ≠ Java - hai ngôn ngữ khác hẳn nhau (chỉ trùng tên).
  • Phân biệt HOA/thường: console khác Console; true khác True.
  • Chuỗi phải mở/đóng cùng loại nháy: "..." hoặc '...'.
  • Khi sai, đọc thông báo lỗi: nó ghi rõ loại lỗi và dòng - sửa rồi chạy lại.

Tiếp theo

Đã biết JS chạy ở đâu và chạy thế nào. Bài sau - “Biến & kiểu dữ liệu” - bắt đầu viết code thật: let/const, các kiểu number/string/boolean, và cặp đôi khó nhằn == vs ===.

Câu hỏi thường gặp

Gần như không. Năm 1995 ngôn ngữ này tên là LiveScript, rồi đổi thành “JavaScript” vì Java đang rất nổi - thuần tuý là chiêu marketing. Java và JavaScript là hai ngôn ngữ khác hẳn nhau về cú pháp lẫn cách chạy. Có câu nói vui: “Java is to JavaScript as ham is to hamster” (giăm bông với chuột hamster).

ECMAScript (viết tắt ES) là CHUẨN của ngôn ngữ - bộ quy tắc do tổ chức Ecma International và uỷ ban TC39 soạn ra. “JavaScript” là tên thông dụng của ngôn ngữ tuân theo chuẩn đó. Mỗi năm có một bản chuẩn mới bổ sung tính năng (ES2015 còn gọi ES6, rồi ES2016, ES2017… cứ thế mỗi năm). Nói “JavaScript” hay “ECMAScript” thường là nói cùng một thứ.

V8 (của Google, dùng trong Chrome và Node.js), SpiderMonkey (Firefox), JavaScriptCore (Safari) là các ENGINE - chương trình thực sự chạy code JS của bạn. Cùng một ngôn ngữ JavaScript nhưng có nhiều engine - nhiều implementation của cùng một chuẩn, giống Python có CPython, PyPy. Vì cùng theo chuẩn ECMAScript nên một đoạn JS chạy được trên nhiều engine.

Không. Node.js KHÔNG phải ngôn ngữ - nó là một runtime (môi trường chạy): lấy engine V8 và bọc thêm thư viện để JavaScript chạy được NGOÀI trình duyệt (đọc/ghi tệp, mở server, gọi mạng…). Bạn vẫn viết đúng ngôn ngữ JavaScript, chỉ là chạy ở một nơi khác.

Bản chất: event loop & libuv - khoá JS nâng cao →

Engine hiện đại làm cả hai. Nó KHÔNG đọc thẳng từng dòng chữ: trước hết phân tích (parse) mã nguồn, dịch sang bytecode rồi thông dịch bytecode đó; phần code chạy nhiều lần (“nóng”) còn được JIT biên dịch sang mã máy lúc chạy để nhanh hơn. Nên gọi chính xác là “biên dịch sang bytecode + JIT”, không phải thông dịch thuần.

Để bắt đầu, chỉ cần một trình duyệt - Console trong DevTools đã chạy JS ngay, không cài gì thêm. Khi muốn chạy JS ngoài trình duyệt (tệp, server), cài Node.js bản LTS ở nodejs.org (hoặc dùng nvm để quản nhiều phiên bản). Deno và Bun là các runtime thay thế mới hơn, nhưng khoá này dùng Node.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

Theo bài, Node.js là gì?

  1. 1

    Hello trong Console

    Mở DevTools của trình duyệt (phím F12) → tab Console, gõ: console.log("Xin chao, <tên mèo con>!").

    Hoàn thành khi: Console in ra đúng câu chào với tên mèo con - không cần cài gì.

  2. 2

    Hello bằng Node

    Cài Node.js, tạo tệp hello.js chứa một dòng console.log(...), rồi chạy: node hello.js.

    Hoàn thành khi: Terminal in ra đúng câu trong console.log - JS đã chạy ngoài trình duyệt.

  3. 3

    Thử trong REPL

    node để vào REPL, tính 12 * 12 và đo độ dài chuỗi "JavaScript".length. Kết quả?

    Hoàn thành khi: 144 và 10. REPL in kết quả ngay, không cần console.log.

  4. 4

    Ngôn ngữ vs engine

    Bằng lời: “JavaScript” và “V8” khác nhau ra sao?

    Hoàn thành khi: JavaScript = ngôn ngữ (theo chuẩn ECMAScript); V8 = engine, chương trình chạy ngôn ngữ đó.

  5. 5

    Trình duyệt vs Node

    Nêu một việc chỉ làm được trong trình duyệt, và một việc Node làm tiện hơn.

    Hoàn thành khi: Vd: đổi nội dung trang web (DOM) chỉ có ở trình duyệt; đọc/ghi tệp trên máy thì Node làm được.

  6. 6

    Phiên bản & LTS

    Chạy node --version, ghi lại số phiên bản. LTS nghĩa là gì?

    Hoàn thành khi: In ra vXX.Y.Z; LTS = Long-Term Support - bản ổn định, được hỗ trợ lâu, nên dùng để học.