当前位置: 首页 > Web前端 > JavaScript

使用Object.prototype.toString判断数据类型

时间:2023-03-26 21:30:47 JavaScript

这几天一直在看js文档。有一个数据类型的判断方法可以记录下来备查。完整的解决方案在文末。数据类型js中有6种数据类型,es6中新增了一种。原始数据类型:Number、String、Boolean、null、undefined;引用数据类型:对象;es6新类型:符号。对象可以细分为函数、对象、数组、正则表达式、日期等。使用toString()判断数据类型Object.prototype.toString方法返回对象的类型字符串,所以可以用来判断类型一个值:varobj={};obj.toString()//"[objectObject]"上面的代码调用了空对象的toString方法,结果返回一个字符串对象Object,其中第二个Object代表值的构造函数。这是一种非常有用的确定数据类型的方法。由于实例对象可能会自定义toString方法并重写Object.prototype.toString方法,所以最好直接使用Object.prototype.toString方法获取类型string。通过函数的call方法,可以在任意值上调用该方法,帮助我们判断值的类型。Object.prototype.toString.call(value)上面代码的意思是调用Object.prototype.toString方法获取value值。不同数据类型的Object.prototype.toString方法的返回值如下。编号:返回[对象编号]。字符串:返回[对象字符串]。布尔值:返回[对象布尔值]。未定义:返回[对象未定义]。null:返回[objectNull]。符号:返回[对象符号]。数组:返回[对象数组]。函数:返回[对象函数]。日期对象:返回[对象日期]。RegExp对象:返回[objectRegExp]。arguments对象:返回[objectArguments]。错误对象:返回[对象错误]。数学对象:返回[对象数学]。其他对象:返回[objectObject]。Object.prototype.toString.call(2)//"[对象编号]"Object.prototype.toString.call('')//"[对象字符串]"Object.prototype.toString.call(true)//"[objectBoolean]"Object.prototype.toString.call(undefined)//"[objectUndefined]"Object.prototype.toString.call(null)//"[objectNull]"Object.prototype.toString.call(Symbol())//"[objectSymbol]"Object.prototype.toString.call([])//"[objectArray]"Object.prototype.toString.call(function(){})//"[objectFunction]"Object.prototype.toString.call(newDate())//"[objectDate]"Object.prototype.toString.call(/abc/)//"[objectRegExp]"(function(){return(Object.prototype.toString.call(arguments))})()//"[对象参数]"Object.prototype.toString.call(newError)//"[对象错误]"Object.prototype.toString.call(Math)//"[objectMath]"Object.prototype.toString.call({})//"[objectObject]"利用这个特性,可以写出一个比typeof运算符更准确的类型判断函数。consttype=function(o){consts=Object.prototype.toString.call(o);返回s.match(/\[object(.*?)\]/)[1].toLowerCase();};type({});//“对象”类型([]);//“数组”类型(5);//“数字”类型(空);//“空”类型();//“未定义”类型(/abcd/);//“正则表达式”类型(新日期());//"date"完整方法consttype=(function(){constobj={type_arr:["Number","String","Boolean","Undefined","Null","Symbol","Array","函数","日期","正则表达式","参数","错误","数学","对象",],getType:function(o){consts=Object.prototype.toString.call(o);返回s.match(/\[object(.*?)\]/)[1].toLowerCase();}};obj.type_arr.forEach(t=>{obj['is'+t]=function(o){returnobj.getType(o)===t.toLowerCase();}});returnobj;})();type.getType(123);//numbertype.isObject({});//truetype.isNumber(123);//truetype.isRegExp(/abc/);//true参考:Ob对象对象