Object.prototype.toString.call(target)
来判断引用类型注意:一定是使用call
来调用,否则是判断的Object.prototype的类型此时要先判断是否为基本类型是因为:虽然Object.prototype.toString.call()
能判断出某个值是:number/string/boolean,但是其实在包装的时候是把他们先转变成对象然后再判断类型的。但是JS中的包装类型和原始类型还是有区别的,因为对于一个包装类型来说,typeof的值是object
/**
* 类型判断
*/
function getType(target) {
//先处理最特殊的Null
if (target === null) {
return "null";
}
//判断是不是基础类型
const typeOfT = typeof target;
if (typeOfT !== "object") {
return typeOfT;
}
//肯定是引用类型了
const template = {
"[object Object]": "object",
"[object Array]": "array",
// 一些包装类型
"[object String]": "object - string",
"[object Number]": "object - number",
"[object Boolean]": "object - boolean",
};
const typeStr = Object.prototype.toString.call(target);
return template[typeStr];
}