JavaScript có **2 giá trị đại diện cho "rỗng/không có": null và undefined**. Chúng khác nhau về ngữ nghĩa.
undefined
- Biến khai báo nhưng **chưa gán giá trị**.
- Function không return → trả
undefined. - Property không tồn tại trên object.
typeof undefined === "undefined"
let a;
function b() {}
console.log(a); // undefined
console.log(b()); // undefined
null
- Giá trị **gán chủ động** để biểu diễn "không có giá trị / intentionally empty".
typeof null === "object"(bug lịch sử JS).
let a = null;
function b() { return null; }
console.log(a); // null
console.log(b()); // null
So sánh
null == undefined // true (loose equality) null === undefined // false (strict equality)
Best practice: Dùng undefined cho "chưa khởi tạo", null cho "đã khởi tạo nhưng rỗng ý định".