类型判断(@quiteer/is)
面向 Web 与通用场景的类型判断集合,按模块组织导出:type、dom、color、vanilla、web。
为什么使用
在 JavaScript 开发中,准确判断数据类型和运行环境是基础且频繁的需求。原生的 typeof、instanceof 和 Object.prototype.toString 使用繁琐且容易出错。@quiteer/is 提供了一套统一、标准且经过充分测试的判断函数,旨在提升代码的健壮性和可读性。
优点
- 全面覆盖:涵盖基础类型、DOM 节点、颜色格式、URL 类型、浏览器/运行环境等全方位判断。
- 类型安全:所有函数均实现 TypeScript 类型守卫(Type Guard),在判断为真后自动缩窄变量类型。
- 模块化设计:按功能拆分模块,支持 Tree-shaking,按需引用。
- 轻量高效:零第三方依赖,基于原生 API 封装。
使用场景
- 参数防御性编程:在工具函数或组件 props 中校验输入值是否符合预期。
- 跨端兼容处理:根据
isMobileBrowser、isIOSBrowser等判断环境,抹平差异。 - DOM 交互逻辑:在指令或复杂组件中准确识别
Element、TextNode或Comment。 - 数据清洗:验证接口返回的颜色、URL 或 JSON 字符串格式。
使用方式
安装与引入
ts
import {
// 基础类型
isString, isNumber, isBoolean, isFunction, isArray, isObject, isDef, isUnDef,
isNull, isNullOrUnDef, isEmpty, isPromise, isDate, isRegExp,
// DOM
isElement, isTextNode, isComment, isNode, isNodeList, isImageElement,
// 颜色
isHexColor, isRgbColor, isRgbaColor, isColorName, isColorString,
// 原生
isJSON,
// Web 环境
isClient, isWindow, isMobileBrowser, isChromeBrowser
} from '@quiteer/is'模块说明
type:基础类型与结构判断,来源见packages/is/src/type.tsdom:浏览器 DOM 节点与元素判断,来源见packages/is/src/dom.tscolor:颜色字符串/对象判断,来源见packages/is/src/color.tsvanilla:通用原生判断(如isJSON),来源见packages/is/src/vanilla.tsweb:浏览器与小程序环境判断,来源见packages/is/src/web.ts
代码示例
ts
import { isString, isEmpty, isHexColor, isRgbColor, isElement, isClient } from '@quiteer/is'
/**
* 函数:安全读取标题
* 作用:仅当值为非空字符串时返回其裁剪结果
*/
function readTitle(v: unknown): string {
if (!isString(v) || isEmpty(v)) return ''
return (v as string).trim()
}
/**
* 函数:颜色解析开关
* 作用:根据输入判断是否为十六进制或 rgb/rgba 颜色
*/
function canParseColor(v: unknown): boolean {
return isHexColor(v) || isRgbColor(v)
}
/**
* 函数:图片占位设置
* 作用:在客户端且目标为图片标签时设置占位图
*/
function setPlaceholder(el: unknown, url: string) {
if (!isClient()) return
if (isElement(el) && el instanceof HTMLImageElement) {
el.src = url
}
}API 列表
type
is- 判断值是否为指定类型(基于Object.prototype.toString)isString- 是否为字符串isNumber- 是否为数值isBoolean- 是否为布尔类型isFunction- 是否为函数(含AsyncFunction)isObject- 是否为非null的对象isArray- 是否为数组isDef- 是否已定义(非undefined)isUnDef- 是否未定义(undefined)isNull- 是否为nullisNullOrUnDef- 是否为null或undefinedisNullAndUnDef- 是否同时为null与undefined(注意:逻辑上不可能同时满足,始终返回 false)isEmpty- 是否为空数据(空串、空数组、null、0)isSymbol- 是否为SymbolisPromise- 是否为Promise(且存在then/catch)isAsyncFunction- 是否为AsyncFunctionisMap- 是否为Map对象isSet- 是否为Set对象isWeakMap- 是否为WeakMap对象isWeakSet- 是否为WeakSet对象isRegExp- 是否为正则表达式isDate- 是否为日期对象isProxy- 是否为Proxy对象
dom
isElement- 是否为HTMLElementisTagElement- 是否为标签元素(含tagName)isComment- 是否为注释节点CommentisTextNode- 是否为文本节点TextisElementNode- 是否为元素型节点(元素/注释/文本之一)isDocumentNode- 是否为文档节点DocumentisDocumentFragmentNode- 是否为文档片段DocumentFragmentisNode- 是否为任意节点NodeisNodeList- 是否为节点列表NodeListisElementNodeList- 是否为元素节点列表(每项均为元素)isMediaElement- 是否为多媒体元素HTMLMediaElementisImageElement- 是否为图片元素HTMLImageElementisAudioElement- 是否为音频元素HTMLAudioElementisVideoElement- 是否为视频元素HTMLVideoElementisCanvasElement- 是否为画布元素HTMLCanvasElementisSvgElement- 是否为SVGElement
color
isHexColor- 是否为十六进制颜色(#RGB/#RRGGBB)isRgbColor- 是否为rgb(...)颜色(通道 0-255 或百分比)isRgbaColor- 是否为rgba(...)颜色(含透明度 0-1)isColorName- 是否为颜色名称(仅检查是否为纯字母字符串)isColorString- 是否为颜色字符串(任一颜色格式)isColorObject- 是否为颜色对象{ red, green, blue, alpha }isColor- 是否为颜色(字符串或名称)
url
isUrlString- 是否为可解析的 URL 字符串(new URL)isHttpUrl- 是否为http:链接isHttpsUrl- 是否为https:链接isWebsocketUrl- 是否为ws:/wss:链接isImageUrl- 是否为图片链接(常见图片后缀)isVideoUrl- 是否为视频链接(常见视频后缀)isFileUrl- 是否为文件链接(file:或常见可下载后缀)
vanilla
isJSON- 是否为可被JSON.parse解析的字符串
web
isWebkitBrowser- 是否为 WebKit 内核浏览器isMobileBrowser- 是否为移动端浏览器isChromeBrowser- 是否为 Chrome 浏览器isFirefoxBrowser- 是否为 Firefox 浏览器isSafariBrowser- 是否为 Safari 浏览器isOperaBrowser- 是否为 Opera 浏览器isEdgeBrowser- 是否为 Edge 浏览器isIEBrowser- 是否为 IE 浏览器isMacBrowser- 是否为 macOS 系统isWindowsBrowser- 是否为 Windows 系统isLinuxBrowser- 是否为 Linux 系统isAndroidBrowser- 是否为 Android 系统isIOSBrowser- 是否为 iOS 系统isClient- 是否在浏览器环境(window存在)isWindow- 是否为Window对象isWechatMiniProgram- 是否为微信小程序环境isAlipayMiniProgram- 是否为支付宝小程序环境isBaiduMiniProgram- 是否为百度小程序环境isByteDanceMiniProgram- 是否为字节跳动小程序环境isQQMiniProgram- 是否为 QQ 小程序环境