Trong JavaScript, nullundefined đều biểu thị sự vắng mặt của giá trị, nhưng chúng có những ý nghĩa và cách sử dụng khác nhau. undefined được tự động gán cho các biến chưa được khởi tạo, trong khi null là một giá trị rỗng được lập trình viên gán có chủ đích. Hiểu rõ sự khác biệt giữa hai khái niệm này là điều quan trọng để viết mã hiệu quả và tránh lỗi trong quá trình phát triển.

1. undefined trong JavaScript

undefined biểu thị rằng một biến đã được khai báo nhưng chưa được gán giá trị. Điều này cũng xảy ra khi bạn truy cập vào một thuộc tính hoặc biến mà không có giá trị.

Cách sử dụng phổ biến của undefined

Khi khai báo biến nhưng chưa gán giá trị:

let x;
console.log(x); // undefined

Một hàm không trả về giá trị cụ thể sẽ trả về undefined:

function test() {}
console.log(test()); // undefined

Truy cập thuộc tính không tồn tại trong đối tượng sẽ trả về undefined:

let obj = {};
console.log(obj.property); // undefined

2. null trong JavaScript

null là một giá trị đặc biệt biểu thị rằng biến hoặc đối tượng có “giá trị rỗng” hoặc “không có giá trị” theo cách có chủ ý. Điều này có nghĩa là bạn đã gán null cho biến để cho biết rằng biến đó hiện không có giá trị.

Cách sử dụng phổ biến của null

Khi muốn khởi tạo một biến với giá trị rỗng:

let y = null;
console.log(y); // null

Dùng null khi cố ý gán giá trị trống cho một biến để sau này có thể gán giá trị khác:

let person = {
  name: "Anh",
  age: null
};

3. Sự khác biệt chính giữa nullundefined

Nguồn gốc

undefined được JavaScript tự động gán cho các biến, thuộc tính hoặc hàm mà không có giá trị cụ thể. Trong khi đó, null phải được lập trình viên gán thủ công khi muốn chỉ định rằng một biến hoặc đối tượng không có giá trị.

Loại dữ liệu (Type)

undefined có kiểu là "undefined":

console.log(typeof undefined); // "undefined"

null có kiểu là "object":

console.log(typeof null); // "object"

So sánh bằng toán tử =====

Khi sử dụng toán tử lỏng ==, nullundefined được coi là bằng nhau:

console.log(null == undefined); // true

Tuy nhiên, khi sử dụng toán tử nghiêm ngặt ===, chúng không được coi là giống nhau vì khác loại dữ liệu:

console.log(null === undefined); // false

4. Khi nào nên sử dụng nullundefined?

Sử dụng undefined khi biến chưa được khởi tạo hoặc khi cần kiểm tra xem biến đã được gán giá trị hay chưa. Sử dụng null khi bạn cần khởi tạo biến hoặc đối tượng với một giá trị rỗng có chủ đích, và sau đó sẽ gán giá trị thực cho biến hoặc thuộc tính này.

5. Tình huống thực tế

Ví dụ khi làm việc với API, bạn có thể gặp null để chỉ sự vắng mặt của dữ liệu trong cơ sở dữ liệu, trong khi undefined có thể xuất hiện khi một biến chưa được khởi tạo hoặc thuộc tính không tồn tại.

Kết luận

nullundefined đều thể hiện sự vắng mặt của giá trị, nhưng null là giá trị được gán có chủ ý bởi lập trình viên, còn undefined xuất hiện khi biến chưa được khởi tạo hoặc không có giá trị.