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
注意事項
- 空值檢查: 檢查 null、undefined、空字符串、空數組、空對象
- 空格字符串: 只包含空格的字符串被認為是空的
- 數字: 0 不被認為是空的
- 布爾值: false 不被認為是空的
與其他函數的區別
isEmpty
: 檢查值是否為空isNull
: 只檢查 nullisUndefined
: 只檢查 undefinedisString
: 檢查是否為字符串
性能
- 時間復雜度: O(1)
- 空間復雜度: O(1)
- 適用場景: 數據驗證、表單處理、API響應檢查