js 判断数据类型的几种方法
判断js中的数据类型有一下几种方法:typeof、instanceof、constructor、prototype、$.type()/jquery.type(),接下来主要比较一下这几种方法的异同。
先举几个例子:
vara="iamstring."; varb=222; varc=[1,2,3]; vard=newDate(); vare=function(){alert(111);}; varf=function(){this.name="22";};
1、最常见的判断方法:typeof
alert(typeofa)------------>string alert(typeofb)------------>number alert(typeofc)------------>object alert(typeofd)------------>object alert(typeofe)------------>function alert(typeoff)------------>function
其中typeof返回的类型都是字符串形式,需注意,例如:
alert(typeofa=="string")------------->true alert(typeofa==String)--------------->false
另外typeof可以判断function的类型;在判断除Object类型的对象时比较方便。
2、判断已知对象类型的方法:instanceof
alert(cinstanceofArray)--------------->true alert(dinstanceofDate) alert(finstanceofFunction)------------>true alert(finstanceoffunction)------------>false
注意:instanceof后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。
3、根据对象的constructor判断:constructor
alert(c.constructor===Array)---------->true
alert(d.constructor===Date)----------->true
alert(e.constructor===Function)------->true
注意:constructor在类继承时会出错
eg:
functionA(){}; functionB(){}; A.prototype=newB();//A继承自B varaObj=newA(); alert(aobj.constructor===B)----------->true; alert(aobj.constructor===A)----------->false;
而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
alert(aobjinstanceofB)---------------->true; alert(aobjinstanceofB)---------------->true;
言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:
aobj.constructor=A;//将自己的类赋值给对象的constructor属性 alert(aobj.constructor===A)----------->true; alert(aobj.constructor===B)----------->false;//基类不会报true了;
4、通用但很繁琐的方法:prototype
alert(Object.prototype.toString.call(a)===‘[objectString]')------->true; alert(Object.prototype.toString.call(b)===‘[objectNumber]')------->true; alert(Object.prototype.toString.call(c)===‘[objectArray]')------->true; alert(Object.prototype.toString.call(d)===‘[objectDate]')------->true; alert(Object.prototype.toString.call(e)===‘[objectFunction]')------->true; alert(Object.prototype.toString.call(f)===‘[objectFunction]')------->true;
大小写不能写错,比较麻烦,但胜在通用。
5、无敌万能的方法: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(newDate())==="date" jQuery.type(newError())==="error"//asofjQuery1.9 jQuery.type(/test/)==="regexp"
其他一切都将返回它的类型“object”。
通常情况下用typeof判断就可以了,遇到预知Object类型的情况可以选用instanceof或constructor方法,实在没辙就使用$.type()方法。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!