您的位置:首页 > Web前端 > JavaScript

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

2020-07-14 05:52 169 查看

封装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”

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: