忘记版-判断数据的类型

109 阅读1分钟

忘记版-判断数据的类型

判断一个数据是否是数组、字符串、对象。

在以往的实现中,可以基于鸭子类型的概念来判断,比如判断这个数据有没有length属性,有没有sort方法或者clice方法等。
但更好的方法是用Object.prototype.toString来计算。比如Object.prototype.toString.call([1,2,3])总是返回"[object Array]",而Object.prototype.toString.call("str")总是返回"[object String]"
所以我们可以写一系列的isType函数

JS代码-普通版

// 基础版的实现代码
var isString = function(obj){
    return Object.prototype.toString.call(obj) == "[object String]"
}
var isArray = function(obj){
    return Object.prototype.toString.call(obj) == "[object Array]"
}
var isNumber = function(obj){
    return Object.prototype.toString.call(obj) == "[object Number]"
}

JS代码-升级版

// 为了避免多余的代码,我们尝试把这些字符串作为参数提前直入isType函数
var isType = function(type){
    return function(obj){
    	return Object.prototype.toString.call(obj) == '[object '+ type +']';
    }
}
var isString = isType("String");
var isArray = isType("Array");
var isNumber = isType("Number");
console.log(isArray([1,2,3])) // true

// 还可以使用循环语句,批量注册isType函数
var Type = {};
for(var i = 0; type; type = ['String','Array','Number'][i++]){
    (function(type)){
    	Type['is' + type] = funtion( obj ){
            return  Object.prototype.toString.call(obj) == '[object '+ type +']';
        }
    }(type)
}
Type.isArray([]);
Type.isString("str");

OK,虽然判断很简单,但还是想记录一下代码实现。

End