在 JavaScript 中,判斷變量是否為空需要根據不同的數據類型和具體需求來處理。以下是常見場景的解決方案:
1. 基礎判斷:null
?或?undefined
javascript
if (value === null || value === undefined) {// 變量為空 }
或簡寫為:
javascript
if (value == null) { // 同時匹配 null 和 undefined// 變量為空 }
2. 字符串:空或僅包含空格
javascript
if (typeof value === 'string' && value.trim() === '') {// 空字符串或全空格 }
3. 數組:長度為 0
javascript
if (Array.isArray(value) && value.length === 0) {// 空數組 }
4. 普通對象:無自身可枚舉屬性
javascript
if (typeof value === 'object' && !Array.isArray(value) && value !== null && Object.keys(value).length === 0) {// 空對象 {} }
5. 擴展類型:Map、Set
javascript
if ((value instanceof Map || value instanceof Set) && value.size === 0) {// 空的 Map 或 Set }
綜合函數
結合以上場景的通用函數:
javascript
function isEmpty(value) {if (value == null) return true; // null 或 undefinedif (typeof value === 'string') return value.trim() === ''; // 字符串if (Array.isArray(value)) return value.length === 0; // 數組if (value instanceof Map || value instanceof Set) return value.size === 0; // Map/Setif (typeof value === 'object') return Object.keys(value).length === 0; // 普通對象return false; // 其他類型(數字、布爾值等) }
注意事項
-
數字?
0
?和布爾值:通常不視為空,若需特殊處理,添加條件?value === 0
。 -
特殊對象:如?
Date
、RegExp
,默認視為非空,需按需調整。 -
字符串空格:
trim()
?會移除首尾空格,若需嚴格空字符串,改用?value === ""
。
示例測試
javascript
isEmpty(null); // true isEmpty(undefined); // true isEmpty(''); // true isEmpty(' '); // true isEmpty([]); // true isEmpty({}); // true isEmpty(new Map()); // true isEmpty(new Set()); // true isEmpty(0); // false isEmpty(false); // false isEmpty({ a: 1 }); // false
根據實際需求調整判斷邏輯,確保覆蓋您的業務場景。