Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách xác định biến là undefined hoặc null trong JavaScript

Kiểm tra biến undefined hoặc null là thao tác phổ biến. Cách kiểm tra đúng phụ thuộc vào việc bạn muốn kiểm tra gì: "chưa khai báo", "đã khai báo nhưng chưa gán", hay "đã gán null".

Bảng so sánh nhanh

Biểu thứcKiểm tra gìKết quả với undefinedKết quả với nullKết quả với 0/""/false
if (x)Truthyfalsefalsefalse (loại cả 0, "", false)
if (x == null)Null OR Undefinedtruetruefalse
if (x === null)Chỉ nullfalsetruefalse
if (x === undefined)Chỉ undefinedtruefalsefalse
typeof x === "undefined"Chưa khai báo HOẶC undefinedtruefalsefalse

Các tình huống và cách xử lý

1. Kiểm tra biến có giá trị "hợp lệ" (không null/undefined)


// ✅ Khuyến nghị: == null (bắt cả 2)
if (value == null) { /* missing */ }

// Hoặc explicit
if (value === null || value === undefined) { /* missing */ }

// ❌ Tránh: if (!value) – loại cả 0, "", false, NaN

2. Kiểm tra biến đã được KHAI BÁO (tránh ReferenceError)


// ✅ An toàn: typeof không ném lỗi nếu biến chưa khai báo
if (typeof myVar !== "undefined") {
  // myVar đã khai báo (có thể giá trị = undefined)
}

// ❌ Nguy hiểm: if (myVar) – ReferenceError nếu chưa khai báo

3. Phân biệt "chưa khai báo" vs "khai báo = undefined"


let declaredButUndefined;
 // undeclaredVar không tồn tại

typeof declaredButUndefined; // "undefined"
typeof undeclaredVar;        // "undefined" (KHÔNG lỗi!)

"declaredButUndefined" in window; // true (global) / false (local scope)

4. Kiểm tra property object


const obj = { a: 1, b: null, c: undefined };

"a" in obj;                    // true
"b" in obj;                    // true (key tồn tại, value null)
"c" in obj;                    // true (key tồn tại, value undefined)
"d" in obj;                    // false

obj.hasOwnProperty("b");       // true
Object.hasOwn(obj, "c");       // true (ES2022, an toàn hơn)

Ví dụ từ bài gốc (đã cải tiến)


<script>
  var age = 10;
  
  // Cách 1: Truthy check (loại 0, "", false, null, undefined, NaN)
  if (age) {
    document.write("True - age có giá trị truthy");
  } else {
    document.write("False - age là falsy");
  }
  
  // Cách 2: Kiểm tra cụ thể null/undefined
  var maybeNull = null;
  if (maybeNull == null) { // bắt cả null và undefined
    document.write("
maybeNull là null hoặc undefined"); } </script>

Modern Patterns (ES2020+)


// Nullish Coalescing (??) - Default cho null/undefined
const value = userInput ?? "default"; // Chỉ null/undefined mới dùng default

// Optional Chaining (?.) - Truy cập an toàn
const city = user?.address?.city ?? "Unknown";

// Logical Assignment (ES2021)
x ??= defaultValue; // Chỉ gán nếu x là null/undefined

Best Practice

  • Kiểm tra "có giá trị hay không": value == null (ngắn) hoặc value === null || value === undefined (rõ ràng).
  • Kiểm tra "đã khai báo": typeof x !== "undefined".
  • Kiểm tra property: Object.hasOwn(obj, 'key') (ES2022).
  • Default value: ?? thay vì ||.
  • Luôn bật "use strict" hoặc dùng ES Modules.