Appearance
isEmpty判断是否是空值
Hidden Title
基础用法:
isEmpty(value)基础用法
说明
isEmpty 用于判断一个值是否属于业务上的“空值”。默认采用更安全的结构空值语义:只把没有实际内容的值视为空,不会把 0、false、BigInt(0) 误判为空。
调用形式
ts
isEmpty(value)
isEmpty(value, strict)isEmpty(value)
isEmpty(value, strict)参数说明
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
value | any | 是 | - | 要判断的值。支持普通值和 Vue ref。 |
strict | boolean | 否 | true | 是否使用严格空值语义。传 false 时兼容旧逻辑,会把 0、false、BigInt(0) 也视为空。 |
返回值
返回 boolean,表示是否为空。
默认 strict=true 时会返回 true 的情况:
| 值 | 说明 |
|---|---|
undefined / null | 空值。 |
'' / ' ' | 空字符串或全空格字符串。 |
[] | 空数组。 |
{} | 没有自有 key 的普通对象,包含 Symbol key 的对象不算空。 |
NaN | 非法数字。 |
new Map() / new Set() | 空集合。 |
new Date('invalid') | 无效日期。 |
默认 strict=true 时 0、false、BigInt(0)、函数、正则、Promise、有效日期都不算空。
常用场景
ts
isEmpty('')
// true
isEmpty(0)
// false
isEmpty(0, false)
// true
isEmpty(ref([]))
// trueisEmpty('')
// true
isEmpty(0)
// false
isEmpty(0, false)
// true
isEmpty(ref([]))
// true注意事项
对象判断只针对普通对象,避免把 RegExp、Error、Promise 等实例误判为空。如果你需要旧版“假值都算空”的语义,明确传 strict=false。
函数源码
isEmpty
来源:packages/utils/src/base.ts
/**
* 判断值是否为空。
*
* 默认采用更安全的“结构空值”语义:
* `undefined`、`null`、空字符串、空数组、空对象、`NaN`、空 `Map` / `Set`、无效日期会返回 `true`。
*
* @param data 要判断的值。
* @param strict 是否使用严格模式。默认 `true`;传 `false` 时会沿用旧语义,把 `0` 和 `false` 也视为空值。
* @returns 是否为空。
*
* @example
* isEmpty(' ')
* // => true
*
* @example
* isEmpty(0)
* // => false
*
* @example
* isEmpty(0, false)
* // => true
*/
export function isEmpty(data: any, strict = true): boolean {
if (isRef(data)) {
data = unref(data)
}
// 处理 null/undefined
if (data == null) return true
// 如果是日期对象,检查它是否是有效的日期
if (data instanceof Date) {
return Number.isNaN(data.getTime())
}
// 处理基础类型
switch (typeof data) {
case 'string':
return data.trim().length === 0
case 'boolean':
return strict ? false : !data
case 'number':
return Number.isNaN(data) || (!strict && data === 0)
case 'symbol':
return false
case 'bigint':
return strict ? false : data === BigInt(0)
case 'function':
return false
}
// 处理集合类型
if (data instanceof Map || data instanceof Set) return data.size === 0
// 处理数组
if (Array.isArray(data)) {
return data.length === 0
}
// 只把 plain object 当作普通对象判断,避免误伤 Promise / RegExp / Error 等实例
if (isPlainObject(data)) {
return Reflect.ownKeys(data).length === 0
}
return false
}