在 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
根据实际需求调整判断逻辑,确保覆盖您的业务场景。