baseIsDate 是 isDate 浏览器环境下的实现
功能概述
baseIsDate 函数是 Lodash 中用于判断一个值是否为 Date 对象的内部工具函数。它通过组合使用 isObjectLike 和 baseGetTag 两个基础函数,实现了对日期类型的精确判断。
源码实现
// baseIsDate
function baseIsDate(value) {
return isObjectLike(value) && baseGetTag(value) == dateTag;
}
实现原理解析
1. 对象特征检查
函数首先通过 isObjectLike(value) 进行初步的类型过滤:
- 确保传入的值不是 null
- 确保传入的值是对象类型(typeof value === 'object')
这一步骤是必要的,因为:
// 非对象类型直接返回 false
isObjectLike(null); // => false
isObjectLike(undefined); // => false
isObjectLike(1); // => false
isObjectLike("date"); // => false
2. 日期标签匹配
函数通过 baseGetTag(value) == dateTag 进行精确的类型判断:
- baseGetTag 函数返回对象的原始类型标签
- dateTag 常量值为 '[object Date]'
这种实现方式的优势:
// Date 对象返回 true
baseIsDate(new Date()); // => true
// 非 Date 对象返回 false
baseIsDate({}); // => false
baseIsDate([]); // => false
baseIsDate("2023-01-01"); // => false
总结
baseIsDate 函数通过巧妙地结合 isObjectLike 和 baseGetTag 两个基础函数,实现了对 Date 类型的精确判断。