分析:
typeof
只能返回,string
、number
、boolean
、undefined
、object
null
会被判为object
array
会被判为object
所以比较优雅的方式是Object.portotype.toString.call()
的方法,最后再用正则把其中的[object ]
替换掉就ok了
function typeOf (obj) {
if (obj === null) return String(null)
return typeof obj === 'object'
? Object.prototype.toString.call(obj).replace(/(\[object|\])/g, '').toLowerCase()
: typeof obj
}
let obj = typeOf({})
let arr = typeOf([])
let number = typeOf(123)
let str = typeOf('hello')
let fun = typeOf(function fn () { })
let bool = typeOf(true)
let nul = typeOf(null)
let kong = typeOf(undefined)
console.log(obj, arr, number, str, fun, bool, nul, kong);