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.