JS 实现精准分类的typeof()方法

封装mytypeof方法

系统的typeof方法不能区分对象、数组、包装类的具体类型,所以利用对象原型上的toString方法和类数组,完成一个更加完善的mytypeof()方法。

达到以下效果:

mytypeof ([ ]) --> array
mytypeof ({ }) --> object
mytypeof (function) --> object
mytypeof (new Number( )) --> number
mytypeof (123) --> number

步骤:
1、封装mytypeof,作为工具类方法,区分typeof方法
2、先分类:原始值,引用值
3、区分引用值,先判断是不是null;数组、对象、包装类(new Number)会返回object,通过Obejct.prototype.toString()方法,实现分类输出

   var mytypeof = function(target){
       //记录通过typeof方法的返回值 
       var ret = typeof(target);

       //通过类数组完成引用值的分类
       // 属性名为调用toString方法返回的结果,值为该类型数据的输出结果
       var template = {
           "[object Object]" : "object",
           "[object Numebr]" : "number - object",
           "[object String]" : "string - object",
           "[object Array]"  : "array - object",
           "[object Boolean]" : "boolean - object" 
       };

       if(target == null){
           return "null";
       }else if(ret == "object"){
           var str = Object.prototype.toString.call(target);
           //通过原型链上的toString方法的返回值访问类数组中对应的属性值
           return template[str];
       }else{
           return ret;
       }
   }

控制台上测试输出:

mytypeof(123) --> “number”
mytypeof(null) --> “null”
mytypeof(“ass”) --> “string”
mytypeof([]) --> “array”
mytypeof({}) --> “object”
mytypeof(new String(“true”)) --> “string - object”
mytypeof(new Boolean(true)) --> “boolean - object”
mytypeof(new Number(123)) --> “number - object”
mytypeof(new Array()) --> “array”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值