jquery判断数据类型源码解读

var class2type = {};
("Boolean Number String Function Array Date RegExp Object Error").split(" ").forEach(function(item,index){
  class2type["[object "+item+']'] = item.toLowerCase();
})
function type(param){
  if(param == null){
    return String(param);
  }
  return typeof param === "object" || typeof param === "function" ?class2type[ Object.prototype.toString.call(param) ] || 'obejct':typeof param;
}
console.log(type(123)) //number

这里主要运用了typeof操作符和Object原型的toString方法。
typeof主要用于基本数据类型的判断,对于引用类型函数返回'function'其余都返回‘object’,无法确定引用类型的最终类型。
Object.prototype.toString.call(obj) 可用于所有类型数据的类型判断

console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(123));//[object Number]
console.log(Object.prototype.toString.call("jone"));//[object String]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]

由于toString()是一个方法会增加计算机负担,这里作者尽量用typeof来判断,typeof判断不了的才用toString()方法进一步判断,最终可以返回精确的数据类型。

posted @ 2019-11-22 16:21  泛舟江湖  阅读(190)  评论(0编辑  收藏  举报