JavaScript实现jQuery中的type检测数据类型

众所周知,JavaScript中的typeof虽然可以检测数据类型,但是在检测数据类型的时候,返回的数据类型不一定准确:比如 null 也会返回null ,返回的数据类型只有下面几种,远远不能准确的判断属于何种数据类型。

1
2
3
4
5
6
"undefined" ——如果这个值未定义;
"boolean" ——如果这个值是布尔值;
"string" ——如果这个值是字符串;
"number" ——如果这个值是数值;
"object" ——如果这个值是对象或 null
"function" ——如果这个值是函数。

在网上也看了一些所谓的全面的检测方法,也没有很好的实现封装。无聊之余看了下jQuery的type实现方法,现在我用JavaScript实现一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//定义一个对象保存所有的数据类型
var class2type = {};
var dataType = "Boolean Number String Function Array Date RegExp Object Error Symbol".split(" ");
//把所有的数据类型遍历进class2type里面 jQuery中用的是自己封装的each forEach() 是es5新增的方法
dataType.forEach(function (name, i) {
class2type["[object " + name + "]"] = name.toLowerCase();
})
var type = function (obj) {
if (obj == null) { // 当等于undefined 或者 null 直接返回
return obj + "";
}
return typeof obj === "object" || typeof obj === "function" ?
class2type[toString.call(obj)] || "object" :
typeof obj;
}

至此便可以检测JavaScript中的所有数据类型了。

文章目录
|