前言
判断数据类型,我们经常用到typeof、instanceof、Array.isArray()等运算符或方法判断类型,然typeof和instanceof并不全面,typeof不能区分null、数组和对象,instanceof不能区分对象和数组。因为在js中数组是对象的子集。故提供一份完整的判断类型util供大家参考。
代码
// type.js
const types = ['Arguments', 'Function', 'Array', 'Object', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet']
const fns = {}
types.forEach(v => {
fns[`is${v}`] = obj => {
return Object.prototype.toString.call(obj) === `[object ${v}]`
}
})
fns.isJson = obj => {
if (fns.isString(obj)) {
try {
const o = JSON.parse(obj)
return fns.isObject(o) || fns.isArray(o)
} catch (err) {
return false
}
}
return false
}
export default {
...fns
}