利用Object.prototype.toString.call()方法,可以获取到[object ?],其中的?就是我们想要获取的数据类型。 对于Object.prototype.toString.call(),前面有做过一次简单的分析:简单分析Object.prototype.toString.call(arr)判断数组类型 之后思路就是截取到这个?这里用的是replace方法将前面’[object ‘替换成’’,之后把右边的’]‘替换成’’,再将首字母转换成小写。最后判断输入的内容是否属于object类型(typeof判断) 如果是 通过该方法转换,否则直接输出typeof判断的类型即可。
function getType(obj) {
if (obj === null) {
return String(obj)
}
const toType = (obj) => {
// '[object RealType]' => realtype
return Object.prototype.toString.call(obj).replace('[object ', '').replace(']', '').toLowerCase()
}
return typeof obj === 'object' ?
toType(obj) :
typeof obj;
}
// 调用
console.log(getType(null)) // -> null
console.log(getType(undefined)) // -> undefined
console.log(getType({})) // -> object
console.log(getType([])) // -> array
console.log(getType(123)) // -> number
console.log(getType(true)) // -> boolean
console.log(getType('123')) // -> string
console.log(getType(/123/)) // -> regexp
console.log(getType(new Date())) // -> date
console.log(getType(new Set([])))// ->set
|