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()方法进一步判断,最终可以返回精确的数据类型。