这里用到了原型链上的toString
这是因为toString为Object的原型方法,而Array ,function等类型作为Object的实例,都重写了toString方法。不同的对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法(function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串.....),而不会去调用Object上原型toString方法(返回对象的具体类型),所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。
function type(target){
var temp={
"[object Array]" : "array",
"[object Object]" : 'object',
'[object Number]' : 'number - object',
'[object Boolean]' : 'boolean - object',
'[object String]' : 'string - object'
}
if(target === null){
return "null";
}
if(typeof(target)=='object'){
var str =Object.prototype.toString.call(target);
return temp[str]
}else{
return typeof target
}
}