Javascript中判断对象的基本类型

 在判断javascript中某个变量的类型时,以前用 typeof,但是发现typeof不能判断 Array类型,其返回是一个object,后来又用obj.constructor来判断,这下比较准确,于是决定constructor也有可能判断某个对象的类型,比 fucntion class1(d){//...} var d=new class1(1); 是否用constructor也能判断d就是class1呢?
经过测试,不能完全判断。

? 何谓不能完全判断呢?

   如果写成
      var class1=function(){}
    类的形式,然后 var c=new class1(); // c.constructor==function
   如果写成
      function class1(){}
    的形式,然后 var c=new class1();// c.constructor==class1
这下可麻烦了,在javascript中不能可能规定一个类(function)的写法一定是某一个中型式的。
所以,判断某个对象是某个自定义类型,目前还是没有好的办法判断!!

当然 javascript中判断某个类型有一个通用的办法,就是看某个对象是否具有某个类的属性或者方法,如要判断一个对象是数组 if(a.join)就可以了,但是还是不喜欢这样的做法!

从网上搜了一下,觉得下面的判断类型还是比较好的,于是摘抄过来,对其判断是否是对象不敢苟同,觉得也没有这个必要。

 

1 判断是否为数组类型

<script type="text/javascript">
//<![CDATA[
     var a=[0];
         document.write(isArray(a),'<br/>');
     function isArray(obj){
         return (typeof obj=='object')&&obj.constructor==Array;
     }
//]]>
</script>


2 判断是否为字符串类型

<script type="text/javascript">
//<![CDATA[
     document.write(isString('test'),'<br/>');
     document.write(isString(10),'<br/>');
     function isString(str){
         return (typeof str=='string')&&str.constructor==String;
     }
//]]>
</script>


3 判断是否为数值类型

<script type="text/javascript">
//<![CDATA[
     document.write(isNumber('test'),'<br/>');
     document.write(isNumber(10),'<br/>');
     function isNumber(obj){
         return (typeof obj=='number')&&obj.constructor==Number;
     }
//]]>
</script>


4 判断是否为日期类型

<script type="text/javascript">
//<![CDATA[
     document.write(isDate(new Date()),'<br/>');
     document.write(isDate(10),'<br/>');
     function isDate(obj){
         return (typeof obj=='object')&&obj.constructor==Date;
     }
//]]>
</script>


5 判断是否为函数

<script type="text/javascript">
//<![CDATA[
     document.write(isFunction(function test(){}),'<br/>');
     document.write(isFunction(10),'<br/>');
     function isFunction(obj){
         return (typeof obj=='function')&&obj.constructor==Function;
     }
//]]>
</script>


6 判断是否为对象
<script type="text/javascript">

//<![CDATA[
     document.write(isObject(new Object()),'<br/>');
     document.write(isObject(10),'<br/>');
     function isObject(obj){
         return (typeof obj=='object')&&obj.constructor==Object;
     }
//]]>
</script>
判断对是否是对象就没有必要了。

增加一个判断是否为null

   function isNULL(obj){
       return obj===null || !obj ||typeof obj=='undefine';
   }

综上,得到判断类型的函数工具包:

type={
        isString:function(obj){
            return typeof str=='string';
        },
        isNumber:function(obj){
            return typeof obj=='number';
        },       
        isFunction:function(obj){
            return typeof obj=='function';
        },       
        isBoolean:function(obj){
            reurn typeof obj == 'boolean';
        },
        isNull:function(obj){
            return obj==null ||typeof obj=='undefined';
        },
        isDate:function(obj){
            return (typeof obj=='object')&&obj.constructor==Date;
        },
        isArray:function(obj){
            return (typeof obj=='object')&&obj.constructor==Array;
        }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值