不要跟我说类型检测不是很简单吗?好像直接使用typeof就可以检测了,这个有什么难度?但是大家都知道使用typeof检测出来的并无法检测出Arry、Date、RegExp、Error、Null等特殊类型,如我们遇到是arry的类型,检测出来的是object类型。因此我们想要得到更加精确的类型,就必须得自己动手写一个函数出来判断下类型
1、了解Object.prototype.toString
var b = null
Object.prototype.toString.call(b) //[object Null]
由Object.prototype.toString的方法我们可以知道这个方法可以获得[object Null],[object Error]等类型。这样我们就可以直接来拼接一个属于我们自己的类型检测函数啦
2、类型检测函数type
大致的思想是:假如我们检测到的是object,那么就使用Object.prototype.toString去检测,否则就使用typeof进行检测
[cc lang=”javascript”]var typeClass = {}
“Boolean Number String Function Array Date RegExp Object Error Null Undefined”.split(‘ ‘).map(function(item, index){
typeClass[‘[object ‘+ item +’]’] = item.toLowerCase();
})
function type(obj){
var objType = typeof obj ===’object’ || typeof obj ===’function’ ? typeClass[Object.prototype.toString.call(obj)] || ‘object’ : typeof obj;
return objType
}
type(111) //number
type(‘111’) //string
type([1,2,3]) //array
type(null) //null
type({a:1}) //object
type(new Date()) //date[/cc]
JQ中的type函数
[cc lang=”javascript”]type: function( obj ) {
if ( obj == null ) {
return obj + “”;
}
return typeof obj === “object” || typeof obj === “function” ?
class2type[ toString.call( obj ) ] || “object” :
typeof obj;
}[/cc]
JQ中对IE浏览器做了兼容!