您好,匿名用户

jquery 源码中 toType方法问题

0 投票

代码如下:

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?

用户头像 提问 5月29日 @ 切糕 中士 (1,296 威望)
分享到:

1个回答

0 投票
 
最佳答案

jquery 源码

var class2type = {};
var toString = class2type.toString;
"Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ).forEach(function(name,i){
  class2type[ "[object " + name + "]" ] = name.toLowerCase();
})
function toType( obj ) {
    if ( obj == null ) {
        return obj + "";
    }
    return typeof obj === "object" || typeof obj === "function" ?
        class2type[ toString.call( obj ) ] || "object" :
        typeof obj;
}

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能够正确返回基本数据的类型。

用户头像 回复 5月29日 @ Shaco 中士 (1,204 威望)
选中 5月16日 @切糕
提一个问题:

相关问题

0 投票
1 回复 18 阅读
用户头像 提问 5月23日 @ Irelia 中士 (1,327 威望)
0 投票
1 回复 320 阅读
用户头像 提问 2017年 3月16日 @ Cassiopeia 中士 (1,302 威望)
0 投票
1 回复 225 阅读
用户头像 提问 2017年 5月30日 @ 河蟹 中士 (1,371 威望)
0 投票
1 回复 172 阅读
用户头像 提问 2017年 2月17日 @ Yasuo 上士 (1,556 威望)
0 投票
1 回复 73 阅读
用户头像 提问 5月29日 @ Irelia 中士 (1,327 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...