检测 数组、函数、类数组对象、对象 的方法

首先说明下: 数组、函数、类数组对象 都是对象的一种。详情可见下图:JavaScript 数据类型

1、判断对象类型:内置对象(数组、函数、日期、正则表达式、错误 )、宿主对象(表示网页结构的HTMLElement对象)、自定义对象


/**
 * [_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 */



3、检测 类数组对象

类数组对象 定义 : 拥有 一个数值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;
}

posted @ 2015-06-29 14:55  spindrift  阅读(269)  评论(0编辑  收藏  举报