zoukankan      html  css  js  c++  java
  • 检测 数组、函数、类数组对象、对象 的方法

    首先说明下: 数组、函数、类数组对象 都是对象的一种。详情可见下图: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;
    }
    
    
    

  • 相关阅读:
    【面试题】M
    【转】C/S,B/S区别
    【转】指针和引用的区别
    内联函数
    实习-随记
    【面试】http协议知识
    wenbenfenlei
    【面试】链表反转
    测试面试题2
    测试面试题
  • 原文地址:https://www.cnblogs.com/spray1990/p/4607487.html
Copyright © 2011-2022 走看看