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