Lodash的类型检测
js是一种弱类型动态语言,很多时候为了代码的健壮性,必须对变量进行类型检查。查看 Lodash 源码这样的检查比比皆是,因此希望进行一番整理。
JavaScript的类型系统
JavaScript的类型有两类: 原始数据类型(Primitive Data Type)以及引用数据类型(Reference Data Type):
原始数据类型
- undefined/null
- boolean
- number
- NaN
- Infinite
- 数值
- string
- symbol
- bigint
其中bigint是ES2020新引入类型,用于表示任意精度的整数值
引用数据类型
- Object
- Array
- Function
- Date
- Error
- Set
- Map
- WeakSet
- WeakMap
Number类检测
isNumber
源码
1 | function isNumber(value) { |
解读:
此处除了考虑value为数值外,还有可能是 Number 对象。isObjectLike用于判断 value 为非 null 的对象,getTag函数调用了 Object.prototype.toString 来获取内部 [[class]] 属性,进而判断对象的类型
isObject
源码
1 | function isObject(value) { |
解读:
此处判断变量是否为 object 时,Lodash 将特殊值 null 排除在外,同时注意保留 typeof 为 function 的情况。
isInteger
源码
1 | function isInteger(value) { |
toInteger函数可将 number,字符串形式的数字转换为整数,如果结果仍然和原值相等,说明此数字为整数。