Skip to content

isEmpty

检查值是否为空(null、undefined、空字符串、空数组、空对象等)。

语法

typescript
isEmpty(value: any): boolean

参数

  • value (any): 要检查的值

返回值

  • boolean: 如果值为空返回 true,否则返回 false

示例

基本用法

typescript
import { isEmpty } from 'radash'

isEmpty(null) // true
isEmpty(undefined) // true
isEmpty('') // true
isEmpty([]) // true
isEmpty({}) // true
isEmpty(0) // false
isEmpty('hello') // false
isEmpty([1, 2, 3]) // false
isEmpty({ key: 'value' }) // false

处理字符串

typescript
import { isEmpty } from 'radash'

isEmpty('') // true
isEmpty('   ') // true (只包含空格)
isEmpty('hello') // false
isEmpty('0') // false
isEmpty('false') // false

处理数组

typescript
import { isEmpty } from 'radash'

isEmpty([]) // true
isEmpty([null]) // false
isEmpty([undefined]) // false
isEmpty([1, 2, 3]) // false
isEmpty(['']) // false

处理对象

typescript
import { isEmpty } from 'radash'

isEmpty({}) // true
isEmpty({ key: 'value' }) // false
isEmpty({ null: null }) // false
isEmpty({ undefined: undefined }) // false

处理数字

typescript
import { isEmpty } from 'radash'

isEmpty(0) // false
isEmpty(1) // false
isEmpty(-1) // false
isEmpty(NaN) // false
isEmpty(Infinity) // false

处理布尔值

typescript
import { isEmpty } from 'radash'

isEmpty(true) // false
isEmpty(false) // false

处理函数

typescript
import { isEmpty } from 'radash'

isEmpty(() => {}) // false
isEmpty(function() {}) // false
isEmpty(async () => {}) // false

处理日期

typescript
import { isEmpty } from 'radash'

isEmpty(new Date()) // false
isEmpty(new Date('invalid')) // false

处理Map和Set

typescript
import { isEmpty } from 'radash'

isEmpty(new Map()) // true
isEmpty(new Map([['key', 'value']])) // false
isEmpty(new Set()) // true
isEmpty(new Set([1, 2, 3])) // false

处理正则表达式

typescript
import { isEmpty } from 'radash'

isEmpty(/pattern/) // false
isEmpty(new RegExp('pattern')) // false

处理Symbol

typescript
import { isEmpty } from 'radash'

isEmpty(Symbol()) // false
isEmpty(Symbol('description')) // false

处理类实例

typescript
import { isEmpty } from 'radash'

class Example {
  constructor() {
    this.value = 'test'
  }
}

isEmpty(new Example()) // false
isEmpty(new Date()) // false
isEmpty(new Array()) // true
isEmpty(new Object()) // true

表单验证

typescript
import { isEmpty } from 'radash'

function validateForm(data: any) {
  const errors: string[] = []
  
  if (isEmpty(data.name)) {
    errors.push('姓名不能为空')
  }
  
  if (isEmpty(data.email)) {
    errors.push('邮箱不能为空')
  }
  
  if (isEmpty(data.hobbies)) {
    errors.push('爱好不能为空')
  }
  
  return errors
}

const formData = {
  name: '',
  email: 'alice@example.com',
  hobbies: []
}

const errors = validateForm(formData)
// ['姓名不能为空', '爱好不能为空']

API响应处理

typescript
import { isEmpty } from 'radash'

async function fetchData() {
  const response = await fetch('/api/users')
  const data = await response.json()
  
  if (isEmpty(data)) {
    throw new Error('没有数据返回')
  }
  
  return data
}

try {
  const users = await fetchData()
  console.log('用户数据:', users)
} catch (error) {
  console.error('获取数据失败:', error.message)
}

配置验证

typescript
import { isEmpty } from 'radash'

function validateConfig(config: any) {
  const requiredFields = ['apiKey', 'baseUrl', 'timeout']
  const missingFields = []
  
  for (const field of requiredFields) {
    if (isEmpty(config[field])) {
      missingFields.push(field)
    }
  }
  
  if (missingFields.length > 0) {
    throw new Error(`缺少必需配置: ${missingFields.join(', ')}`)
  }
  
  return config
}

const config = {
  apiKey: '',
  baseUrl: 'https://api.example.com',
  timeout: 5000
}

try {
  validateConfig(config)
} catch (error) {
  console.error('配置验证失败:', error.message)
  // 输出: 配置验证失败: 缺少必需配置: apiKey
}

数据清理

typescript
import { isEmpty } from 'radash'

function cleanData(data: any) {
  const cleaned: any = {}
  
  for (const [key, value] of Object.entries(data)) {
    if (!isEmpty(value)) {
      cleaned[key] = value
    }
  }
  
  return cleaned
}

const rawData = {
  name: 'Alice',
  email: '',
  phone: null,
  address: undefined,
  hobbies: [],
  notes: '   '
}

const cleanedData = cleanData(rawData)
// { name: 'Alice', notes: '   ' }

条件渲染

typescript
import { isEmpty } from 'radash'

function renderUserProfile(user: any) {
  if (isEmpty(user)) {
    return '<div>用户不存在</div>'
  }
  
  if (isEmpty(user.avatar)) {
    return `
      <div>
        <h1>${user.name}</h1>
        <p>默认头像</p>
      </div>
    `
  }
  
  return `
    <div>
      <h1>${user.name}</h1>
      <img src="${user.avatar}" alt="头像" />
    </div>
  `
}

递归检查

typescript
import { isEmpty } from 'radash'

function deepIsEmpty(obj: any): boolean {
  if (isEmpty(obj)) {
    return true
  }
  
  if (Array.isArray(obj)) {
    return obj.every(item => deepIsEmpty(item))
  }
  
  if (typeof obj === 'object' && obj !== null) {
    return Object.values(obj).every(value => deepIsEmpty(value))
  }
  
  return false
}

const nestedData = {
  level1: {
    level2: {
      level3: []
    }
  }
}

deepIsEmpty(nestedData) // true

注意事项

  1. 空值检查: 检查 null、undefined、空字符串、空数组、空对象
  2. 空格字符串: 只包含空格的字符串被认为是空的
  3. 数字: 0 不被认为是空的
  4. 布尔值: false 不被认为是空的

与其他函数的区别

  • isEmpty: 检查值是否为空
  • isNull: 只检查 null
  • isUndefined: 只检查 undefined
  • isString: 检查是否为字符串

性能

  • 时间复杂度: O(1)
  • 空间复杂度: O(1)
  • 适用场景: 数据验证、表单处理、API响应检查

Released under the MIT License.