jQuery源码中数据类型检测如图,对所有类型的检测都会返回一个小写的该类型字符串;


实现方式如下:
先将数据类型放在一个对象中
let class2 = {},
//将大部分数据类型放入class2对象中
arr=("Array Boolean Number String Function Date RegExp Object Error").split(" ").forEach((i)=>{
class2[`[object ${i}]`] = i.toLowerCase()
})

创建一个函数
function type(obj){
//如果形参是null或者undefined,则直接返回字符串的形参
if(obj===null){
return String(obj)
}
//如果形参是object或者是function,则对去class2对象中对应的键名并返回,如果没有则返回object
return typeof obj ==="object" ||typeof obj ==="function"?
class2[{}.toString.call(obj)] ||"object":
//如果形参既不是object也不是function,则直接判断形参的类型
typeof obj
}
注意:symbol类型不调用时函数类型,用{}.toString.call 来调用返回的也是function,
只有当调用时,他才是symbol类型,symbol直接用typeof判断,返回的也是小写的"symbol"