Cả hai đều biểu thị "không có giá trị" nhưng khác nhau về ý nghĩa và nguồn gốc:
undefined: biến đã khai báo nhưng chưa gán, tham số hàm thiếu, property không tồn tại, hàm khôngreturn— do engine tự đặt. Đây là "chưa có gì".null: lập trình viên chủ động gán để nói "cố ý rỗng, chưa có object". Đây là "cố tình không có gì".
Khác biệt hay bị hỏi:
- typeof undefined → 'undefined', còn typeof null → 'object' (một lỗi lịch sử của JS, vẫn giữ để tương thích).
- null == undefined → true (loose), nhưng null === undefined → false (strict).
- Cả hai đều falsy.
Thực hành: dùng undefined cho "chưa khởi tạo" (để engine lo), dùng null khi muốn cố ý đánh dấu một biến/field là rỗng.