| 變量狀態 | if (x) | x == null | 說明 |
|---|---|---|---|
未聲明 x | 拋出 ReferenceError | 拋出 ReferenceError | 嚴格模式下直接報錯 |
var x; (未賦值) | false | true | 默認值 undefined |
var x = null; | false | true | 顯式空值 |
var x = 0; | false | false | 數字零 |
var x = ''; | false | false | 空字符串 |
var x = false; | false | false | 布爾假 |
// 情況 ①:完全沒有 var/let/const 聲明
if (x) {} // ReferenceError: x is not defined
// 情況 ②:聲明但未賦值
var x;
if (x) {} // false
x == null // true (undefined == null 為 true)
JS 中只有 6 個假值:undefined, null, 0, '', false, NaN。其餘均為真值(包括 [], {}, "0", "false")。
null == undefined // true (類型轉換後相等)
null === undefined // false (類型不同)
null == 0 // false
'' == 0 // true (字符串轉數字)
[] == '' // true (數組轉空串)
x == null 同時檢查 null/undefinedx != null && x !== '' 或 !!x(注意 "0" 會通過)typeof x === 'number' && !isNaN(x)===,明確意圖
const isEmpty = v => v == null || v === '' || (Array.isArray(v) && v.length === 0) || (typeof v === 'object' && Object.keys(v).length === 0);
const isBlank = v => v == null || String(v).trim() === '';
理解 JS 類型轉換規則,能避免 90% 的邏輯判斷 Bug。