JavaScript có nhiều cách để chỉ ra việc không có giá trị. Trang này mô tả 2 cách phổ biến nhất: kiểu dữ liệu null
và undefined
.
null
Từ khoá null
thể hiện tình trạng không có giá trị được xác định có chủ đích. null
là một dữ liệu nguyên gốc, mặc dù toán tử typeof
trả về rằng null
là một đối tượng.
Đây là một lỗi được chuyển sang từ phiên bản JavaScript đầu tiên và bị cố tình không giải quyết để tránh làm hỏng hành vi dự kiến trên web.
typeof null
> object
Bạn có thể xác định một biến là null
với kỳ vọng biến đó phản ánh một giá trị được chỉ định cho biến đó tại
một điểm nào đó trong tập lệnh hoặc một giá trị không có sẵn rõ ràng. Bạn cũng có thể gán giá trị null
cho một tệp tham chiếu hiện có để xoá giá trị trước đó.
undefined
undefined
là một giá trị gốc được gán cho các biến vừa được khai báo hoặc cho giá trị kết quả của một thao tác không trả về một giá trị có ý nghĩa. Ví dụ: điều này có thể xảy ra khi bạn khai báo một hàm trong bảng điều khiển dành cho nhà phát triển của trình duyệt:
function myFunction() {}
> undefined
Một hàm trả về undefined
một cách rõ ràng khi câu lệnh return
không trả về giá trị nào.
(function() {
return;
}());
> undefined
So sánh giữa null
và undefined
Mặc dù undefined
và null
có một số chức năng trùng lặp, nhưng chúng có các mục đích khác nhau. Theo nghĩa nghiêm ngặt nhất, null
biểu thị một giá trị có chủ đích được xác định là "trống" và undefined
biểu thị việc thiếu bất kỳ giá trị nào được chỉ định.
null
và undefined
khá ngang nhau, nhưng không hoàn toàn bằng nhau.
Toán tử đẳng thức lỏng lẻo sẽ ép buộc các toán hạng thuộc nhiều kiểu thành giá trị boolean, khiến null
và undefined
đều là false
. Toán tử đẳng thức nghiêm ngặt xem toán hạng của các kiểu dữ liệu khác nhau là không bằng.
null == undefined
> true
null === undefined
> false
Không giống như từ khoá đặt trước null
, undefined
là một thuộc tính của đối tượng chung. Đây là quyết định thiết kế được đưa ra ban đầu trong quá trình phát triển của JavaScript và cho phép các trình duyệt cũ ghi đè hoàn toàn undefined
. Trong các trình duyệt hiện đại, bạn vẫn có thể sử dụng
undefined
làm giá trị nhận dạng trong phạm vi không phải toàn cầu, ghi đè giá trị của giá trị đó trong
phạm vi khai báo đó. Tuyệt đối không sử dụng undefined
làm giá trị nhận dạng. Việc này có thể gây ra các hành vi không mong muốn và có thể khiến các nhà bảo trì sau này của cơ sở mã của bạn bị nhầm lẫn.
Kiểm tra kiến thức
typeof null
trả về dữ liệu gì?
object
undefined
primitive
string