JavaScript通用判空函数的实现与解析

在 JavaScript 中,判断一个值是否为空(包括空数组、空对象、空字符串、0、undefined
、null
、空 Map
、空 Set
等)是一个常见的需求。以下是一个通用的判空函数,涵盖了这些情况:
function isEmpty(value) {
// 处理 null 和 undefined
if (value === null || value === undefined) {
return true;
}
// 处理数字 0
if (typeof value === 'number' && value === 0) {
return true;
}
// 处理空字符串
if (typeof value === 'string' && value.trim() === '') {
return true;
}
// 处理空数组
if (Array.isArray(value) && value.length === 0) {
return true;
}
// 处理空对象
if (typeof value === 'object' && !Array.isArray(value)) {
if (Object.keys(value).length === 0) {
return true;
}
}
// 处理空 Map 和 Set
if (value instanceof Map || value instanceof Set) {
if (value.size === 0) {
return true;
}
}
// 其他情况视为非空
return false;
}
使用示例
console.log(isEmpty(null)); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty(0)); // true
console.log(isEmpty('')); // true
console.log(isEmpty([])); // true
console.log(isEmpty({})); // true
console.log(isEmpty(new Map())); // true
console.log(isEmpty(new Set())); // true
console.log(isEmpty('hello')); // false
console.log(isEmpty([1, 2, 3])); // false
console.log(isEmpty({ key: 'value' })); // false
console.log(isEmpty(new Map([['key', 'value']]))); // false
console.log(isEmpty(new Set([1, 2, 3]))); // false
解释
null
和undefined
:直接判断是否为null
或undefined
。- 数字 0:如果值为
0
,则视为空。 - 空字符串:使用
trim()
去除空格后判断是否为空字符串。 - 空数组:使用
Array.isArray()
判断是否为数组,并检查其长度是否为0
。 - 空对象:使用
Object.keys()
获取对象的键数组,并检查其长度是否为0
。 - 空
Map
和Set
:使用size
属性判断是否为空。
注意事项
- 该函数假设
0
是“空”的,但在某些业务场景中,0
可能是一个有效值,此时需要根据具体需求调整逻辑。 - 对于对象,该函数只检查对象自身的可枚举属性。如果需要检查原型链上的属性,可以使用
Object.getOwnPropertyNames()
或Reflect.ownKeys()
。
这个函数可以根据具体需求进行扩展或调整,以适应不同的业务场景。