rỗng và không xác định

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 nullundefined.

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ếnnull 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 nullundefined

Mặc dù undefinednull 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.

nullundefined 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 nullundefined đề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