柯里化封装类型判断工具的核心是用isType函数固化类型名并返回专用判断函数,如isArray、isDate等,避免重复调用Object.prototype.toString.call,语义清晰且兼容null/undefined。

用函数柯里化封装类型判断工具,核心是把“类型名”提前固化,返回一个可复用的判断函数,既保持语义清晰,又避免重复写 Object.prototype.toString.call。
柯里化基础:拆分参数,固化类型
柯里化不是简单地套个闭包,而是让函数能分步接收参数。类型判断的关键在于统一用 toString 获取内部标签,再比对目标类型字符串:
- 原始写法每次都要写:
Object.prototype.toString.call(val) === '[object Array]' - 柯里化后变成:
isArray(val)、isString(val),语义明确且无重复逻辑 - 本质是把
'Array'、'String'这类字符串作为第一参数传入,返回一个等待值的函数
实现通用柯里化判断函数
定义一个高阶函数 isType,它接收类型名(如 'Number'),返回具体判断函数:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
const isType = (type) => (val) =>
Object.prototype.toString.call(val) === `[object ${type}]`;
// 使用示例
const isArray = isType('Array');
const isDate = isType('Date');
const isRegExp = isType('RegExp');
console.log(isArray([1, 2])); // true
console.log(isDate(new Date())); // true
console.log(isRegExp(/abc/)); // true
扩展成类型工具集(可选增强)
可以基于 isType 快速生成常用判断函数,甚至挂载到对象上方便调用:
立即学习“Java免费学习笔记(深入)”;
- 批量生成:
['String', 'Number', 'Boolean', 'Null', 'Undefined', 'Object', 'Array', 'Function'].reduce(...) - 导出为工具对象:
const Type = { isArray, isString, isFunction, ... } - 支持链式调用?不推荐——类型判断是纯函数,链式反而增加复杂度
注意边界与兼容性
这个方案依赖 Object.prototype.toString,它能准确识别内置类型,但要注意:
- 不能判断自定义 class 实例的具体类名(需用
val.constructor.name或instanceof) - 对
null和undefined有效([object Null]/[object Undefined]) - ES6+ 环境下可结合
Symbol.toStringTag自定义对象的 toString 行为

















