• js获取或判断任意数据类类型的通用方法(getDataType)和将NodeList转为数组(NodeListToArray)


    function getDataType(any)
    {
    /* (1) Object.prototype.toString.call 方法判断类型:
    优点:通用,返回"[object String]" 具体object的类型
    缺点:不能返回继承的类型

    (2)typeof x
    缺点:对object类型不能细分;
    优点:对空null的判断 'undefined'的应用;
    返回类型有:'undefined' “string” 'number' 'boolean' 'function' 'object'

    (3) instanceof 能返回具体的类型,只适用于用new关键字创建的对象进行判断
    */
    // var baseType=["string","number","boolean"];//基本类型
    // var refType=["object", "Function","Array","Date"];//引用类型


    try
    {
    var dtype=Object.prototype.toString.call(any);
    if(dtype=="[object Object]") //IE,某个dom元素对象
    {

    try
    {
    if(any.constructor)
    {
    var constructorStr=any.constructor.toString(); //obj.constructor可以返回继承的类型
    if(constructorStr.indexOf("Array")!=-1) { dtype="[object Array]"; }
    else
    if(constructorStr.indexOf("HTMLCollection")!=-1) { /* IE */ dtype="[object NodeList]"; }

    else
    if((constructorStr.indexOf("function")!=-1) && (constructorStr.indexOf("Object()")!=-1))
    {
    dtype="[object Object]";
    }
    else
    dtype=constructorStr;
    }
    }
    catch(e)
    {
    return "[object Null]";
    }


    }
    else
    {
    if(dtype=="[object HTMLCollection]") { /* FF */ dtype="[object NodeList]"; }


    }

    return dtype;


    }catch(e)
    {
    return "variable is not defined.";
    }



    }

    //将NodeList转为数组,使NodeList可以使用数组的全部方法
    function NodeListToArray(nodes) {
    var array = null;
    try{
    array = Array.prototype.slice.call(nodes,0);
    }catch(ex){
    array = new Array();
    for(var i = 0,len = nodes.length;i < len;i++) {
    array.push(nodes[i]);
    }
    }

    return array;
    }

    /* //测试 getDataType 方法
    var aa=null;
    alert(getDataType(aa));
    var abc;
    alert(getDataType(abc)); //[object Undefined] 说明此变量已经声明,但尚未被初始化
    var fn=function(){}
    alert(getDataType(fn)); //[object Function]
    alert(getDataType(new Object())); //[object Object]
    alert(getDataType("Hello"));//[object String]
    alert(getDataType(234));//[object Number]
    alert(getDataType(true));//[object Boolean]
    alert(getDataType(new Date())); //[object Date]
    alert(getDataType(new Date().getTime())); //[object Number]
    alert(getDataType(document.getElementById("demopic"))); //[object HTMLDivElement]
    var nodelist=NodeListToArray(document.getElementsByTagName("*"));
    alert(getDataType(nodelist)); //[object Array]
    alert(getDataType(document.getElementsByTagName("*"))); //[object NodeList)]
    //alert(nodelist[10].tagName);
    alert(getDataType(/[a-z]/)); //[object RegExp]
    */

  • 相关阅读:
    rac11.2.0.4私网公网修改
    OGG应用复制进程报错OGG 01161
    顺序容器vector拷贝使用总结
    C++迭代器(STL迭代器)
    C++容器(STL容器)
    win10桌面和手机的扩展API,判断是否有实体后退键API
    python Django 之 Model ORM inspectdb(数据库表反向生成)
    flask框架-大结局
    flask框架-下
    flask框架-中
  • 原文地址:https://www.cnblogs.com/yzryc/p/6053119.html
Copyright © 2020-2023  润新知