jQuery源码中的数据类型检测

178 阅读1分钟

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"