默认使用typeof来进行传入参数类型的判断,但是真实发现只能用来判断最基本的string和number。像引用类型就无法进行判断,直接定义为object。
仔细查看文档之后有个方法可以用 Object.prototype.toString.call来进行判断,但真实一用发现NaN也是算number的一类。
这时候我们就要做个大判断,将NaN先剔除在外。代码如下:
function checkType (type) {
if (Number.isNaN(type)) {
return 'NaN'
}
switch (Object.prototype.toString.call(type)) {
case '[object String]': return 'string'
case '[object Number]': return 'number'
case '[object Boolean]': return 'boolean'
case '[object Null]': return 'null'
case '[object Undefined]': return 'undefined'
case '[object Array]': return 'array'
case '[object Object]': return 'object'
}
}