在javascript中如果要判断某个对象属于哪种类型,最靠谱的方法就是使用Object.prototype.toString方法:
例如:
var temp = [];
alert(Object.prototype.toString.call(temp));
弹出"[object Array]"。
如果temp=null;那么弹出[object Null]。
如果temp=undefined;那么弹出[object Undefined]。
Object.prototype.toString.call(obj);会返回一个[object class]形式的字符串。jQuery.isArray等正是利用这种特性来判断是否为一个数组等。
现在来模拟下:
<script type="text/javascript">
(function(window){
var core_toString = Object.prototype.toString,
class2type = {},
type_toString = ['Boolean','Number','String','Function','Array','Date','RegExp','Object','Error'];
for(var i=0,maxLen=type_toString.length;i<maxLen;i++) {
class2type["[object "+type_toString[i]+"]"] = type_toString[i].toLowerCase();
}
var Strong = {
isArray:Array.isArray || function(obj) {
return Strong.type(obj) === "array";
},
type:function(obj) {
if ( obj == null ) {
return String( obj ); //直接返回"null"
}
return typeof obj === "object" || typeof obj === "function" ? //可能为undefined等,直接利用typeof返回
class2type[ core_toString.call(obj) ] || "object" : typeof obj;
}
};
window.Strong = Strong;
})(window);
var temp = [];
//alert(Strong.isArray(temp)); true
var a;
alert(Strong.type(a)); //undefined
</script>