首先说明下: 数组、函数、类数组对象 都是对象的一种。详情可见下图:JavaScript 数据类型javascript
一、判断对象类型:内置对象(数组、函数、日期、正则表达式、错误 )、宿主对象(表示网页结构的HTMLElement对象)、自定义对象html
/** * [_isTypeOf description] * @param {[object]} _data [对象] * @param {[string]} _type [对象类型] *内置对象:array,function,date,regexp,error *宿主对象:htmlelement(htmldivelement,htmlbodyelement...),htmlcollection *自定义对象:object * @return {Boolean} [true/false] */ var _isTypeOf = function(_data,_type){ try{ _type = _type.toLowerCase(); if (_data===null) return _type=='null'; if (_data===undefined) return _type=='undefined'; return Object.prototype.toString.call(_data).toLowerCase()=='[object '+_type+']'; }catch(e){ return !1; } }; /* examples */ var sf=[1,2,3]; // 数组 var func1 = function(){console.log(123);}; //函数 var data= new Date(); //日期 var ng= /java/g; //正则表达式 var err=new Error(); //错误 var syntaxError1=new SyntaxError(); var typeError1=new TypeError(); var uriError1=new URIError(); var main=document.getElementById("main"); //表示网页结构的HTMLElement对象 var arrayLike1= document.getElementById("navList").getElementsByClassName("menu") var sf2={"0":"df","1":"ff",length:2}; //类数组对象 var sf3={"0":"df","1":"ff"}; //普通对象 var sf4={ff:"fs",td:"fe"}; //普通对象 _isTypeOf(sf,"array") _isTypeOf(func1,"function") _isTypeOf(data,"date") _isTypeOf(ng,"regexp") _isTypeOf(err,"error") _isTypeOf(syntaxError1,"error") _isTypeOf(typeError1,"error") _isTypeOf(uriError1,"error") _isTypeOf(main,"html(...)element") //字符串的头是"html",尾是"element", 用正则表达式判断下 _isTypeOf(main,"htmlcollection") _isTypeOf(sf2,"object") _isTypeOf(sf3,"object") _isTypeOf(sf4,"object") /* 以上返回所有为true */
三、检测 类数组对象java
类数组对象 定义 : 拥有 一个数值length属性 和 对应非负整数属性 的对象 看做是类数组对象。正则表达式
function isArrayLike(o){ var _isTypeOf = function(_data,_type){ try{ _type = _type.toLowerCase(); if (_data===null) return _type=='null'; if (_data===undefined) return _type=='undefined'; return Object.prototype.toString.call(_data).toLowerCase()=='[object '+_type+']'; }catch(e){ return !1; } }; if( o && !_isTypeOf(o,"array") && typeof o === "object" && isFinite(o.length) && o.length >= 0 && o.length === Math.floor(o.length) && o.length < 4294967296 ) return true; else return false; }