const và tính bất biến trong JavaScript: Bất biến ở “biến” chứ không phải “giá trị”

Sự thật chỉ đúng một nửa
"const không phải bất biến, vì bạn vẫn có thể thay đổi object." Câu nói này thường chỉ đúng một nửa, và đó là lý do khiến nhiều người mới lập trình bị dẫn dắt sai!
const trong JavaScript không đóng băng giá trị của bạn. Nó đóng băng liên kết biến (variable binding)—tức là bạn không thể gán biến đó sang một giá trị khác hoàn toàn.
Gán lại (Thất bại)
const x = 5;
x = 10; // ❌ TypeError
Lỗi vì x là một hằng. Bạn không thể "chỉ" nó sang chỗ khác.
Đột biến / Thay đổi (Thành công)
const user = { name: "Ava" };
user.name = "Morgan"; // ✅ Chạy được!
Bạn không gán lại user; bạn chỉ đang sửa nội dung của object mà nó trỏ tới.
Mảng cũng hoạt động y như vậy
const items = [1, 2, 3];
items.push(4); // ✅ Chạy được!
items = []; // ❌ TypeError
Mô hình tư duy đúng
Hãy nhớ rằng: Binding giữ nguyên, nhưng giá trị bên trong vẫn có thể thay đổi. JavaScript xử lý theo ngữ nghĩa ngôn ngữ, không phải địa chỉ bộ nhớ thô!
Nếu bạn thật sự muốn bất biến (Immutability)
Nếu mục tiêu của bạn là không ai được phép thay đổi object, thì const chưa đủ. Bạn cần tự ép buộc tính bất biến.
Dùng Object.freeze()
const user = Object.freeze({ name: "Ava" });
user.name = "Morgan"; // ❌ TypeError (trong strict mode)
Lưu ý: Object.freeze chỉ đóng băng nông (shallow). Các object lồng bên trong vẫn bị thay đổi trừ khi bạn đóng băng luôn chúng!
Tóm lại, const không phải là bất biến sâu (deep immutability). Nó chỉ cấm việc gán lại. Hãy tự tin dùng nó cho các liên kết cố định, nhưng nhớ rằng đối tượng bên trong vẫn "mở cửa" cho sự thay đổi!
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

Làm chủ kiểm thử E2E với Playwright vào năm 2026
Làm chủ kiểm thử E2E với Playwright vào năm 2026: tự động chờ, cách ly ngữ cảnh trình duyệt, chặn mạng, lưu trữ xác thực và song song hóa CI.
Read more
Các Mẫu TypeScript Nâng Cao cho Ứng Dụng Doanh Nghiệp
Nắm vững các mẫu TypeScript doanh nghiệp nâng cao: branded types, conditional response types, template literal routing và toán tử satisfies.
Read more
Quản lý trạng thái trong React 2026: Vượt xa Redux
Hướng dẫn toàn diện về quản lý trạng thái React năm 2026: so sánh React 19 actions, trạng thái máy chủ TanStack Query, Zustand, Jotai và Signals.
Read more