Skip to content
On this page

isEmpty判断是否是空值

Hidden Title

基础用法:isEmpty(value)

基础用法

说明

isEmpty 用于判断一个值是否属于业务上的“空值”。默认采用更安全的结构空值语义:只把没有实际内容的值视为空,不会把 0falseBigInt(0) 误判为空。

调用形式

ts
isEmpty(value)
isEmpty(value, strict)
isEmpty(value)
isEmpty(value, strict)

参数说明

参数类型必填默认值说明
valueany-要判断的值。支持普通值和 Vue ref
strictbooleantrue是否使用严格空值语义。传 false 时兼容旧逻辑,会把 0falseBigInt(0) 也视为空。

返回值

返回 boolean,表示是否为空。

默认 strict=true 时会返回 true 的情况:

说明
undefined / null空值。
'' / ' '空字符串或全空格字符串。
[]空数组。
{}没有自有 key 的普通对象,包含 Symbol key 的对象不算空。
NaN非法数字。
new Map() / new Set()空集合。
new Date('invalid')无效日期。

默认 strict=true0falseBigInt(0)、函数、正则、Promise、有效日期都不算空。

常用场景

ts
isEmpty('')
// true

isEmpty(0)
// false

isEmpty(0, false)
// true

isEmpty(ref([]))
// true
isEmpty('')
// true

isEmpty(0)
// false

isEmpty(0, false)
// true

isEmpty(ref([]))
// true

注意事项

对象判断只针对普通对象,避免把 RegExpErrorPromise 等实例误判为空。如果你需要旧版“假值都算空”的语义,明确传 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
}

思云博智私有前端组件库