首页 > 其他分享 >js判断数据类型的方法,js获取数据类型的方法,js util类

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

时间:2022-09-23 12:33:33浏览次数:72  
标签:instanceof NaN Object 数据类型 js 获取数据 toString var

本博客js util分类下所有方法都集成在Jsutil库中,Jsutil是一个js util工具类,一个功能型函数库   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 a = Number('xx1') //这时候返回的是NaN对象
a.constructor.name //Number 因为NaN还是属于 Number构造类, 所以他的构造函数还是指向了Number
//Infinity 同理
Object.prototype.toString 他可以找到已有JS中本身的大部分数据类型,但他也判断不了自定义的构造函数类型,也判断不了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;
}

 

 

标签:instanceof,NaN,Object,数据类型,js,获取数据,toString,var
From: https://www.cnblogs.com/hrw3c/p/16722305.html

相关文章