常用工具函数之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