js-封装判断变量是否为空的方法

使用场景

场景1

请求接口返回的数据是数组类型,没有数据时,后端竟然返回null(坑),而不是空数组,导致判断数据是否为空报错 console.log(!arr.length) ==> Uncaught TypeError: Cannot read properties of null (reading 'length')

场景2

由于js是弱类型语言,一开始声明变量是数组,进过一系列的赋值操作后,由于代码不规范,变量可能变成了undefined、null或其他数据类型,这时通过!arr.length判断也会报错

场景3

判断数值类型是否为空,0转成布尔值为false,这明显就不对了

场景4

判断对象类型是否为空,每次都得手写,太麻烦

// 检查字符串是否为空
const checkStringEmpty = (str) => {
  return !str
}
// 检查数值是否为空
const checkNumberEmpty = (num) => {
  return !num.toString()
}
// 检查对象是否为空
const checkObjectEmpty = (obj) => {
  return Object.keys(obj).length === 0
}
// 检查数组是否为空
const checkArrayEmpty = (arr) => {
  return arr.length === 0
}
// 各数据类型检查方法字典
const checkDataEmptyDict = {
  string: checkStringEmpty,
  number: checkNumberEmpty,
  Object: checkObjectEmpty,
  Array: checkArrayEmpty,
  function: () => false,
  undefined: () => true,
  boolean: (data) => !data,
  Null: () => true
}
/**
 * @description 检查数据是否为空,为空返回true,不为空返回false
 * @param {any} data
 * @return {Boolean}
 * @example isEmpty({}) ⇒ true
*/
const isEmpty = (data) => {
  let type = typeof(data)
  // 基础数据类型
  if (type !== 'object') return checkDataEmptyDict[type](data)
  // 引用数据类型
  type = Object.prototype.toString.call(data).replace(/^\[object (\S+)\]$/,'$1')
  return checkDataEmptyDict[type](data)
}
// 使用
let data = {}
if (isEmpty(data)) {
  console.log('data为空!')
} else {
  console.log('data值为:', data)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值