常用工具函数之is系列

449 阅读3分钟

常用工具函数之is系列

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

"工欲善其事,必先利其器",在看了多个源码库 Vue2 / Vue3,VueUse 和 React 中工具函数之后,收集整理了一些工具函数,当前文章是用于判断真假系列的工具函数。

集合

export const isUndef = (val: any): boolean => typeof val === 'undefined'
export const isDef = (val: any): boolean => typeof val !== 'undefined'
export const isBoolean = (val: any): boolean => typeof val === 'boolean'
export const isTrue = (val: any): boolean => val === true
export const isFalse = (val: any): boolean => val === false
export const isString = (val: any): boolean => typeof val === 'string'
export const isNumber = (val: any): boolean => typeof val === 'number'
export const isSymbol = (val: any): boolean => typeof val === 'symbol'
export const isObject = (val: any): boolean => val !== null && typeof val === 'object'
export const isArray =  Array.isArray
export const isFunction = (val: any): boolean => typeof val === 'function'
export const objectToString = Object.prototype.toString
export const toTypeString = (val: any): string => objectToString.call(val)
export const isMap = (val: any): boolean => toTypeString(val) === '[object Map]'
export const isSet = (val: any): boolean => toTypeString(val) === '[object Set]'
export const isDate = (val: any): boolean => toTypeString(val) === '[object Date]'
export const isPromise = (val: any): boolean => isObject(val) && isFunction(val.then) && isFunction(val.catch)
export const isClient = (): boolean => isDef(window)
export const isMobile = (): boolean => isClient() && window?.navigator?.userAgent && /Mobi|Android|iPhone/i.test(window.navigator.userAgent)
export const isIOS = (): boolean => isClient() && window?.navigator?.userAgent && /iP(ad|hone|od)/.test(window.navigator.userAgent)
export const isEmpty = (val: any): boolean => {
  if (val == null) return true;
  if (typeof val === 'boolean') return false;
  if (typeof val === 'number') return !val;
  if (val instanceof Error) return val.message === '';
  switch (Object.prototype.toString.call(val)) {
    case '[object String]':
    case '[object Array]':
      return !val.length;
    case '[object File]':
    case '[object Map]':
    case '[object Set]': {
      return !val.size;
    }
    case '[object Object]': {
      return !Object.keys(val).length;
    }
  }
  return false;
}
export const isEven = (val: any): boolean => val % 2 === 0

1、判断是否未定义

export const isUndef = (val: any): boolean => typeof val === 'undefined'

2、判断是否定义

export const isDef = (val: any): boolean => typeof val !== 'undefined'

3、判断是否为布尔值

export const isBoolean = (val: any): boolean => typeof val === 'boolean'

4、判断是否为真

export const isTrue = (val: any): boolean => val === true

5、判断是否为假

export const isFalse = (val: any): boolean => val === false

6、判断是否为字符串

export const isString = (val: any): boolean => typeof val === 'string'

7、判断是否为数字

export const isNumber = (val: any): boolean => typeof val === 'number'

8、判断是否为符号

export const isSymbol = (val: any): boolean => typeof val === 'symbol'

9、判断是否为对象

export const isObject = (val: any): boolean => val !== null && typeof val === 'object'

10、判断是否为数组

export const isArray =  Array.isArray

11、判断是否为函数

export const isFunction = (val: any): boolean => typeof val === 'function'

12、判断是否为 Map 对象

export const objectToString = Object.prototype.toString
export const toTypeString = (val: any): string => objectToString.call(val)
export const isMap = (val: any): boolean => toTypeString(val) === '[object Map]'

13、判断是否为 Set 对象

export const isSet = (val: any): boolean => toTypeString(val) === '[object Set]'

14、判断是否为 Date 对象

export const isDate = (val: any): boolean => toTypeString(val) === '[object Date]'

15、判断是否为 Promise 对象

export const isPromise = (val: any): boolean => isObject(val) && isFunction(val.then) && isFunction(val.catch)

16、判断当前环境是否为客户端

export const isClient = (): boolean => isDef(window)

17、判断当前环境是否为移动端,该有详细的库ismobilejs

export const isMobile = (): boolean => isClient() && window?.navigator?.userAgent && /Mobi|Android|iPhone/i.test(window.navigator.userAgent)

18、判断当前环境是否为IOS

export const isIOS = (): boolean => isClient() && window?.navigator?.userAgent && /iP(ad|hone|od)/.test(window.navigator.userAgent)

19、判断是否为空

export const isEmpty = (val: any): boolean => {
  if (val == null) return true;
  if (typeof val === 'boolean') return false;
  if (typeof val === 'number') return !val;
  if (val instanceof Error) return val.message === '';
  switch (Object.prototype.toString.call(val)) {
    case '[object String]':
    case '[object Array]':
      return !val.length;
    case '[object File]':
    case '[object Map]':
    case '[object Set]': {
      return !val.size;
    }
    case '[object Object]': {
      return !Object.keys(val).length;
    }
  }
  return false;
}

20、判断是否为偶数

export const isEven = (val: any): boolean => val % 2 === 0