美文网首页
js util类—js判断数据类型的方法,js获取数据类型的方法

js util类—js判断数据类型的方法,js获取数据类型的方法

作者: Blank_8c8e | 来源:发表于2022-11-12 23:59 被阅读0次

    本文章 js util分类下所有的方法都集成在Jsuitl 库中,该库是一个功能型函数库,欢迎大家引用及Star或者提出宝贵的意见

    js中有typeof运算符,instanceof运算符,constructor属性,Object.prototype.toString方法,我们通常使用者四种方法来判断数据类型;

    但这四种方法都有缺陷。

    typeof 方法只能判断出基础数据类型,判断不出引用类型;

    typeof [] //object
    typeof null //object
    

    instanceof 是判断左侧是不是右侧的实例,且他是通过查找原型链判断。所以会有以下缺陷:

    var a = '';
    a instanceof String // false 因为a不是String的实例,a只是一个以string为数据类型的值,所以false
    var b = new String('');
    b instanceof String // true 
    c instanceof Object //true js的对象原型链最终都会指向Object构造类,所以他返回的true
    
    var c = [1,2,3];
    c instanceof Array //true
    c instanceof Object //true 同样是原型链判断的问题
    

    constructor 是判断当前变量的构造函数指向,但在判断NaN、Infinity会存在问题:

    var arr = [1,2,3]
    var nan = Nubmer('1xx');
    var str = 'xxx';
    Object.prototype.toString.call(arr) //[object Array]
    Object.prototype.toString.call(nan) //[object Nubmer]
    Object.prototype.toString.call(str) //[object String]
    var A = function(){};
    var a = new A();
    Object.prototype.toString.call(a) //Object 
    

    基于以上问题,Jsutil的_getVarType结合了以上方法进行了封装,可以获取到各类型数据,包括(NaN,Infinity,和自定义类型);

    源码如下:

    /**
     * 获取变量类型
     * 'Null',
     * 'Undefined',
     * 'Object',
     * 'Array',
     * 'String',
     * 'Number',
     * 'Boolean',
     * 'Function',
     * 'RegExp',
     * 'NaN',
     * 'Infinity'
     * 'Date'
     * 自定义构造函数类:小写函数名
     * @param {*} o
     * @returns string
     */
    const _GetVarType =  (o:any):string =>{
       let typeStr = (Object.prototype.toString.call(o).match(/\[object (.*?)\]/) || [])[1];
       //增加自定义类型获取
       if(typeStr === 'Object'){
          typeStr += `:${o.constructor.name}`
       } else if(typeStr === 'Number'){
           //判断为非数字
          if(!isFinite(o)){
              //判断为NaN类型
             if(isNaN(o)){
                typeStr = 'NaN'
             }else{
                typeStr = 'Infinity'
             }
          }
       }
       return typeStr;
    }
    

    相关文章

      网友评论

          本文标题:js util类—js判断数据类型的方法,js获取数据类型的方法

          本文链接:https://www.haomeiwen.com/subject/jkokxdtx.html