众所周知,JavaScript中的typeof虽然可以检测数据类型,但是在检测数据类型的时候,返回的数据类型不一定准确:比如 null 也会返回null ,返回的数据类型只有下面几种,远远不能准确的判断属于何种数据类型。
"undefined" ——如果这个值未定义;
"boolean" ——如果这个值是布尔值;
"string" ——如果这个值是字符串;
"number" ——如果这个值是数值;
"object" ——如果这个值是对象或 null ;
"function" ——如果这个值是函数。
在网上也看了一些所谓的全面的检测方法,也没有很好的实现封装。无聊之余看了下jQuery的type实现方法,现在我用JavaScript实现一下。
// 定义一个对象保存所有的数据类型
var class2type = {};
var typeList = "Boolean Number String Function Array Date RegExp Object Error Symbol"
// 把所有的数据类型遍历进class2type里面
typeList.split(" ").forEach(function (name, i) {
class2type["[object " + name + "]"] = name.toLowerCase();
})
// class2type = { "[object Boolean]" : "BOOLEAN" }
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;
}