petite-utils
Version:
A collection of small util function in JavaScript.
270 lines (250 loc) • 5.05 kB
text/typescript
/**
* @group 类型检查
* @param {any} value 需要检查类型的值
* @returns {string} 返回类型的小写字符串
*/
function type(value: any): string {
const typeStr = Object.prototype.toString.call(value)
return typeStr.slice(8, -1).toLowerCase()
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isObject(value: any) {
return typeof value === 'object' && value !== null
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isPrimitive(value: any) {
return (
value === null ||
typeof value === 'boolean' ||
typeof value === 'number' ||
typeof value === 'bigint' ||
typeof value === 'string' ||
typeof value === 'symbol' || // ES6 symbol
typeof value === 'undefined'
)
}
/**
* @group 类型检查
* @param e
* @returns
*/
function isError(e: any) {
return type(e) === 'error' || e instanceof Error
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isDate(d: any) {
return type(d) === 'date'
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isArray(value: any) {
if (Array.isArray) {
return Array.isArray(value)
}
return type(value) === 'array'
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isBoolean(value: any) {
return typeof value === 'boolean'
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isNull(value: any) {
return value === null
}
/**
* @group 类型检查
* @description 检查是否为 null 或者 undefined
* @param value
* @returns
*/
function isNullish(value: any) {
// https://stackoverflow.com/a/46716365/6524962
return value == null
}
/**
* @group 类型检查
* @description 检查给定的值是否为数字 是 number 或 bigint,则返回 true,否则返回 false
* @param value - 要检查的值,可以是任何类型
* @return 如果是数字或 BigInt,则返回 true,否则返回 false
*/
function isNumber(value: any) {
// NaN, Infinity, -Infinity
// NaN - NaN = NaN
// Infinity - Infinity = NaN
// -Infinity - -Infinity = NaN
// Infinity * 0 = NaN
// NaN * 0 = NaN
// -Infinity * 0 = NaN
if (typeof value === 'number') return value * 0 === 0
if (typeof value === 'bigint') return true
return false
}
/**
* @group 类型检查
* @description 检查给定的值是否为数值,包括数字、字符串数字 和 BigInt
* 此外,如果给定值是一个非空字符串,它将尝试将其转换为数字并检查其有效性
* @param value - 要检查的值,可以是任何类型
* @return 如果是数字或可转换为有效数字的字符串,则返回 true,否则返回 false
*/
function isNumerical(value: any) {
if (typeof value === 'number') return value * 0 === 0
if (typeof value === 'bigint') return true
if (isString(value) && value.trim() !== '') {
return Number.isFinite ? Number.isFinite(+value) : isFinite(+value)
}
return false
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isString(value: any) {
return typeof value === 'string'
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isEmptyStr(value: any) {
return value === ''
}
/**
* @group 类型检查
* @param value
* @returns
*/
function hasStr(value: any) {
return isString(value) && value !== ''
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isSymbol(value: any) {
return typeof value === 'symbol'
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isUndefined(value: any) {
return value === void 0
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isRegExp(value: any) {
return type(value) === 'regexp'
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isFalsy(value: any) {
return !value // 0 '' NaN null undefined
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isFalsyNon0(value: any) {
return !value && value !== 0
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isTruthy(value: any) {
return !!value
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isFunction(value: any) {
if (isNullish(value)) return false
if (value) {
return (
type(value) === 'function' ||
'function' === typeof value ||
value instanceof Function
)
}
return false
}
/**
* @group 类型检查
* @param value
* @returns
*/
function isEmpty(value: any) {
// ''
if (isEmptyStr(value)) return true
// []
if (Array.isArray(value)) return value.length === 0
// null undefined
if (isNullish(value)) return true
if (isObject(value)) {
for (var prop in value) {
if (value.hasOwnProperty(prop)) return false
}
return true
}
return false
}
export {
type,
isObject,
isArray,
isBoolean,
isDate,
isError,
isNull,
isUndefined,
isNullish,
isNumber,
isNumerical,
isString,
isSymbol,
isRegExp,
isPrimitive,
isFalsy,
isFalsyNon0,
isTruthy,
isFunction,
isEmptyStr,
isEmpty,
}