大家好,我是阿瓜。一个励志分享更多技术的前端瓜 ~
我们已经分享了
radash
库中数组、对象等相关的方法,大家感兴趣的可以前往主页查看阅读;
或许你最近在某个地方听过或者看过
radash
这个词,它是一个typescript编写的方法库,如果你想试试使用它,我们有简单使用示例,直接套用类似情景使用即可,如果你想深入了解一下这个库,想阅读一下它的源码,我们也会带你逐行解析代码;不管是哪种,相信你都能在文章里有所收获;
后续所有方法分享完毕后,我们会整理一份详细目录文章以及思维导图,方便大家查阅使用。
使用说明
Array.isArray()
true
false
使用代码示例
import { isArray } from 'radash'
isArray('hello') // => false
isArray(['hello']) // => true
源码解析
相当于直接调用 Array.isArray
export const isArray = Array.isArray
Arrary.isArray
isArray
isArray()
使用说明
true
false
使用代码示例
import { isDate } from 'radash'
isDate(new Date()) // => true
isDate(12) // => false
isDate('hello') // => false
源码解析
// 定义一个名为 `isDate` 的函数。
export const isDate = (value: any): value is Date => {
// 使用 `Object.prototype.toString` 方法获取 `value` 的内部 `[[Class]]` 属性。
// 如果 `value` 是一个 `Date` 对象,`[[Class]]` 属性将是 "[object Date]"。
return Object.prototype.toString.call(value) === '[object Date]'
}
方法流程说明:
isDate
value
Object.prototype.toString.call(value)
value
'[object Date]'
value
Date
true
value
Date
false
使用说明
true
false
使用代码示例
import { isDate } from 'radash'
isDate(new Date()) // => true
isDate(12) // => false
isDate('hello') // => false
源码解析
// 定义一个函数 `isEmpty`。
export const isEmpty = (value: any) => {
// 如果值为布尔类型,直接返回 true,因为这里假设布尔类型不携带 "内容"。
if (value === true || value === false) return true
// 如果值为 null 或 undefined,返回 true,因为它们代表没有值。
if (value === null || value === undefined) return true
// 如果值为数字,返回是否数字为 0。
// 这里假设 `isNumber` 是一个函数,用于检查值是否为数字类型。
if (isNumber(value)) return value === 0
// 如果值为日期对象,检查日期的时间是否为 NaN。
// 这里假设 `isDate` 是一个函数,用于检查值是否为 Date 对象。
if (isDate(value)) return isNaN(value.getTime())
// 如果值是函数,返回 false,因为函数被认为总是 "非空"。
// 这里假设 `isFunction` 是一个函数,用于检查值是否为函数类型。
if (isFunction(value)) return false
// 如果值是符号,返回 false,因为符号被认为总是 "非空"。
// 这里假设 `isSymbol` 是一个函数,用于检查值是否为 Symbol 类型。
if (isSymbol(value)) return false
// 检查值是否有 length 属性,如果有,检查它是否为 0。
const length = (value as any).length
if (isNumber(length)) return length === 0
// 检查值是否有 size 属性,如果有,检查它是否为 0。
const size = (value as any).size
if (isNumber(size)) return size === 0
// 如果值是对象,通过获取对象的键的数量来判断。
const keys = Object.keys(value).length
return keys === 0
}
方法流程说明:
isEmpty
value
value
null
undefined
true
value
value
false
value
length
size
value
value
使用说明
x
y
Date
RegExp
true
false
使用代码示例
import { isEqual } from 'radash'
isEqual(null, null) // => true
isEqual([], []) // => true
isEqual('hello', 'world') // => false
isEqual(22, 'abc') // => false
源码解析
// 定义一个泛型函数 `isEqual`。
export const isEqual = <TType>(x: TType, y: TType): boolean => {
// 首先使用 `Object.is` 检查两个值是否相同,这个方法可以正确处理 `NaN` 和 `-0`。
if (Object.is(x, y)) return true
// 如果两个值都是 `Date` 对象,比较它们的时间戳。
if (x instanceof Date && y instanceof Date) {
return x.getTime() === y.getTime()
}
// 如果两个值都是 `RegExp` 对象,比较它们的字符串表示。
if (x instanceof RegExp && y instanceof RegExp) {
return x.toString() === y.toString()
}
// 如果任何一个值不是对象或者是 `null`,返回 `false`。
if (
typeof x !== 'object' ||
x === null ||
typeof y !== 'object' ||
y === null
) {
return false
}
// 使用 `Reflect.ownKeys` 获取 `x` 和 `y` 的所有自有属性键。
const keysX = Reflect.ownKeys(x as unknown as object) as (keyof typeof x)[]
const keysY = Reflect.ownKeys(y as unknown as object)
// 如果 `x` 和 `y` 的键的数量不同,返回 `false`。
if (keysX.length !== keysY.length) return false
// 遍历 `x` 的键。
for (let i = 0; i < keysX.length; i++) {
// 检查 `y` 是否有相同的键。
if (!Reflect.has(y as unknown as object, keysX[i])) return false
// 递归地调用 `isEqual` 来比较 `x` 和 `y` 在当前键上的值。
if (!isEqual(x[keysX[i]], y[keysX[i]])) return false
}
// 如果所有检查都通过,返回 `true` 表示 `x` 和 `y` 相等。
return true
}
方法流程说明:
isEqual
TType
x
y
NaN
-0
Date
RegExp
null
false
x
y
isEqual
true
使用说明
true
false
isNumber
isNumber
number
true
false
使用代码示例
import { isFloat } from 'radash'
isFloat(12.233) // => true
isFloat(12) // => false
isFloat('hello') // => false
源码解析
// 定义一个名为 `isFloat` 的函数。
export const isFloat = (value: any): value is number => {
// 首先使用 `isNumber` 函数检查 `value` 是否为数字类型。
// 然后检查 `value` 除以 1 的余数是否不等于 0,来确定它是否为浮点数。
return isNumber(value) && value % 1 !== 0
}
方法流程说明:
isFloat
value
isNumber
value
value
value
value
true
false
使用说明
value
true
false
true
false
使用代码示例
import { isFunction } from 'radash'
isFunction('hello') // => false
isFunction(['hello']) // => false
isFunction(() => 'hello') // => true
源码解析
// 定义一个名为 `isFunction` 的函数。
export const isFunction = (value: any): value is Function => {
// 检查 `value` 是否存在,并且 `value` 是否具有 `constructor`、`call` 和 `apply` 属性。
// 这些属性是函数对象特有的,所以这个检查用来判断 `value` 是否为函数。
return !!(value && value.constructor && value.call && value.apply)
}
方法流程说明:
isFunction
value
value
constructor
call
apply
constructor
Function
call
apply
value
true
value
false
使用说明
value
true
false
isNumber
isNumber
number
true
false
使用代码示例
import { isInt } from 'radash'
isInt(12) // => true
isInt(12.233) // => false
isInt('hello') // => false
源码解析
// 定义一个名为 `isInt` 的函数。
export const isInt = (value: any): value is number => {
// 首先使用 `isNumber` 函数检查 `value` 是否为数字类型。
// 然后检查 `value` 除以 1 的余数是否等于 0,来确定它是否为整数。
return isNumber(value) && value % 1 === 0
}
方法流程说明:
isInt
value
isNumber
value
value
value
value
true
false
使用说明
value
true
false
Number
value
true
false
使用代码示例
import { isNumber } from 'radash'
isNumber('hello') // => false
isNumber(['hello']) // => false
isNumber(12) // => true
源码解析
// 定义一个名为 `isNumber` 的函数。
export const isNumber = (value: any): value is number => {
try {
// 尝试使用 `Number` 构造函数将 `value` 转换为数字。
// 如果转换后的值与原始值 `value` 相等,返回 `true`。
return Number(value) === value
} catch {
// 如果在尝试转换过程中发生错误,返回 `false`。
return false
}
}
方法流程说明:
isNumber
value
Number
value
value
value
true
value
false
使用说明
value
Object
true
false
true
false
使用代码示例
import { isObject } from 'radash'
isObject('hello') // => false
isObject(['hello']) // => false
isObject(null) // => false
isObject({ say: 'hello' }) // => true
源码解析
// 定义一个名为 `isObject` 的函数。
export const isObject = (value: any): value is object => {
// 首先检查 `value` 是否为真值,以排除 `null` 和未定义的值。
// 然后检查 `value.constructor` 是否等于 `Object` 构造函数,
// 这是因为普通对象的构造函数应该是 `Object`。
return !!value && value.constructor === Object
}
方法流程说明:
isObject
value
value
null
undefined
value.constructor
value
constructor
Object
value
Object
value
true
false
使用说明
value
undefined
null
boolean
number
string
symbol
value
true
false
true
false
使用代码示例
import { isPrimitive } from 'radash'
isPrimitive(22) // => true
isPrimitive('hello') // => true
isPrimitive(['hello']) // => false
源码解析
// 定义一个名为 `isPrimitive` 的函数。
export const isPrimitive = (value: any): boolean => {
// 检查 `value` 是否为 `undefined` 或 `null`,这两个值是原始值。
// 或者检查 `value` 的类型是否不是 'object' 和 'function',这两个类型表示复合类型。
return (
value === undefined ||
value === null ||
(typeof value !== 'object' && typeof value !== 'function')
)
}
方法流程说明:
isPrimitive
value
value
undefined
null
typeof
value
'object'
'function'
value
true
value
false
Promise
使用说明
value
Promise
Promise
true
false
value
then
then
Promise
true
false
使用代码示例
import { isPromise } from 'radash'
isPromise('hello') // => false
isPromise(['hello']) // => false
isPromise(new Promise(res => res())) // => true
源码解析
// 定义一个名为 `isPromise` 的函数。
export const isPromise = (value: any): value is Promise<any> => {
// 首先检查 `value` 是否存在,如果不存在(比如是 `null` 或 `undefined`),返回 `false`。
if (!value) return false
// 检查 `value` 是否具有 `then` 属性,如果没有,返回 `false`。
// `then` 属性是 `Promise` 对象特有的。
if (!value.then) return false
// 使用 `isFunction` 函数检查 `value.then` 是否是一个函数,如果不是,返回 `false`。
if (!isFunction(value.then)) return false
// 如果通过了所有检查,返回 `true` 表示 `value` 是一个 `Promise` 对象。
return true
}
方法流程说明:
isPromise
value
value
null
undefined
Promise
value
then
Promise
then
isFunction
value.then
Promise
value
true
value
false
使用说明
value
true
false
value
'string'
String
true
false
使用代码示例
import { isString } from 'radash'
isString('hello') // => true
isString(['hello']) // => false
源码解析
// 定义一个名为 `isString` 的函数。
export const isString = (value: any): value is string => {
// 检查 `value` 的类型是否为 'string',这包括了字符串字面量。
// 使用 `instanceof String` 检查 `value` 是否为字符串对象,
// 即通过 `new String(...)` 创建的对象。
return typeof value === 'string' || value instanceof String
}
方法流程说明:
isString
value
typeof
value
'string'
instanceof String
value
String
new String(...)
value
true
value
false
Symbol
使用说明
value
symbol
symbol
true
false
Symbol
true
false
使用代码示例
import { isSymbol } from 'radash'
isSymbol('hello') // => false
isSymbol(Symbol('hello')) // => true
源码解析
// 定义一个名为 `isSymbol` 的函数。
export const isSymbol = (value: any): value is symbol => {
// 首先检查 `value` 是否为真值(即不是 `null` 或 `undefined`)。
// 然后检查 `value.constructor` 是否等于全局 `Symbol` 函数,
// 这是因为 `symbol` 类型的值的构造函数应该是 `Symbol`。
return !!value && value.constructor === Symbol
}
方法流程说明:
isSymbol
value
value
null
undefined
value.constructor
value
constructor
Symbol
value
Symbol
symbol
value
symbol
true
false
我相信能看到最后的都是帅气多金又想进步的~~~~人才。
如果你想查看其他
radash
相关方法,前往
主页查看
目前radash库得所有方法已经更新完毕,下期阿瓜会整理一份
radash
完整方法目录上传,包括思维导图和使用目录。
大家有任何问题或见解,欢迎评论区留言交流和批评指正!!!
你的每一个收藏都是作者写作的动力!!!