
"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.
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.
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.
const items = [1, 2, 3];
items.push(4); // ✅ Chạy được!
items = []; // ❌ TypeError
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 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.
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!
Về bản chất, 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!
Một lập trình viên junior bối rối không hiểu tại sao biến `const` của họ chứa một đối tượng cấu hình lại cho phép các thuộc tính của nó bị thay đổi, dẫn đến hành vi không mong muốn trong một ứng dụng production. Với đoạn code sau, dòng nào sẽ KHÔNG gây ra `TypeError`?
Làm sạch log AI CLI, tạo biểu thức cron, giải mã JWT và tính quyền chmod offline.

Hướng dẫn thực tế về cách viết các bài kiểm thử đơn vị JavaScript bền vững: mẫu AAA, test fixture, kiểm thử dựa trên thuộc tính với fast-check và mocking biên.
Đọc tiếp
So sánh hiệu suất chi tiết giữa Intersection Observer và getBoundingClientRect để theo dõi cuộn, tải chậm và phát hiện khung nhìn.
Đọc tiếp
Tìm hiểu sâu về cách quản lý form trong Next.js 14 bằng Server Actions, useFormState, useFormStatus và Zod để xác thực schema, giúp bạn xây dựng các form hiện đại, nâng cao dần mà không mệt mỏi với JavaScript phía client.
Đọc tiếp