代码如下:
function toType( obj ) {
if ( obj == null ) {
return obj + "";
}
// Support: Android <=2.3 only (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call( obj ) ] || "object" :
typeof obj;
}
这段代码,我测了好几遍,数组什么的本来应该返回["object array"]的,但是都是返回“object”,后来发现class2type[ toString.call( obj ) ]总是返回undefined。难道这个函数只在Android <=2.3起作用,其他情况下,数组什么的一律返回object?
jquery 源码
console.log(toType([])); // 返回array
console.log(toType(null)) //返回null
console.log(toType(new Date())) // 返回date
console.log(toType(new Number())) // 返回number
不一一枚举了
Jquery是为了正确区分对象,才加了这个方法。 因为在JavaScript中,大部分对象使用typeof 返回的是 都是object。而jquery 希望能够区分这些object (如果,Array,Date,Error,RegExp...).
Object.toString.call(obj) 能够返回正确的类型,但是值是[Object Array]这类。
toType简化了这个结果。统一为单个单词。
如果obj不是对象也不是函数,也就是基本数据类型,typeof能够正确返回基本数据的类型。