js - 数据类型检测方法
通用但很繁琐的方法:prototype
| function dataType(val) { |
| return Object.prototype.toString.call(val).slice(8,-1) |
| } |
| alert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true; |
| alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true; |
| alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true; |
| alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true; |
| alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true; |
| alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true; |
| 大小写不能写错,比较麻烦,但胜在通用。 |
| var res; |
| |
| let string='string', |
| number=123, |
| boolean=true, |
| date=new Date(), |
| array=Array(10).fill(1).map((v,i)=>{return i;}) |
| object={}, |
| Null=null, |
| Undefined=undefined, |
| reg=/test/, |
| func=_=>{}; |
| |
| |
| res = Object.prototype.toString.call(string) |
| res = Object.prototype.toString.call(number) |
| res = Object.prototype.toString.call(boolean) |
| res = Object.prototype.toString.call(date) |
| res = Object.prototype.toString.call(array) |
| res = Object.prototype.toString.call(object) |
| res = Object.prototype.toString.call(func) |
| res = Object.prototype.toString.call(Null) |
| res = Object.prototype.toString.call(reg) |
| res = Object.prototype.toString.call(Undefined) |
| |
| console.info(res); |
最常见的判断方法:typeof
| var a = "iamstring."; |
| var b = 222; |
| var c= [1,2,3]; |
| var d = new Date(); |
| var e = function(){alert(111);}; |
| var f = function(){this.name="22";}; |
| alert(typeof a) ------------> string |
| alert(typeof b) ------------> number |
| alert(typeof c) ------------> object |
| alert(typeof d) ------------> object |
| alert(typeof e) ------------> function |
| alert(typeof f) ------------> function |
| 其中typeof返回的类型都是字符串形式,需注意,例如: |
| alert(typeof a == "string") -------------> true |
| alert(typeof a == String) ---------------> false |
| 另外typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。 |
| alert(c instanceof Array) ---------------> true |
| alert(d instanceof Date) |
| alert(f instanceof Function) ------------> true |
| alert(f instanceof function) ------------> false |
| 注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。 |
根据对象的constructor判断: constructor
| alert(c.constructor === Array) ----------> true |
| alert(d.constructor === Date) -----------> true |
| alert(e.constructor === Function) -------> true |
| 注意: constructor 在类继承时会出错 |
| eg: |
| function A(){}; |
| function B(){}; |
| A.prototype = new B(); |
| var aObj = new A(); |
| alert(aobj.constructor === B) -----------> true; |
| alert(aobj.constructor === A) -----------> false; |
| 而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true: |
| alert(aobj instanceof B) ----------------> true; |
| alert(aobj instanceof B) ----------------> true; |
| 言归正传,解决construtor的问题通常是让对象的constructor手动指向自己: |
| aobj.constructor = A; |
| alert(aobj.constructor === A) -----------> true; |
| alert(aobj.constructor === B) -----------> false; |
无敌万能的方法:jquery.type()
| 如果对象是undefined或null,则返回相应的“undefined”或“null”。 |
| jQuery.type( undefined ) === "undefined" |
| jQuery.type() === "undefined" |
| jQuery.type( window.notDefined ) === "undefined" |
| jQuery.type( null ) === "null" |
| 如果对象有一个内部的[[Class]]和一个浏览器的内置对象的 [[Class]] 相同,我们返回相应的 [[Class]] 名字。 (有关此技术的更多细节。 ) |
| jQuery.type( true ) === "boolean" |
| jQuery.type( 3 ) === "number" |
| jQuery.type( "test" ) === "string" |
| jQuery.type( function(){} ) === "function" |
| jQuery.type( [] ) === "array" |
| jQuery.type( new Date() ) === "date" |
| jQuery.type( new Error() ) === "error" |
| jQuery.type( /test/ ) === "regexp" |
| 其他一切都将返回它的类型“object”。 |
通常情况下用typeof 判断就可以了,遇到预知Object类型的情况可以选用instanceof或constructor方法,实在没辙就使用$.type()方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步