判断变量的类型
用 typeof 判断是不够准确的
使用typeof能判断出四种,分别是number,string,boolean,object,剩余的均被检测为object
- 用 Object.prototype.tostring() 就准确完美了 下面用call() 借调使用
// 判断变量类型
function checkType(val, testType) {
const typeObj = {
'[object String]': 'string',
'[object Number]': 'number',
'[object Boolean]': 'boolean',
'[object Null]': 'null',
'[object Undefined]': 'undefined',
'[object Object]': 'object',
'[object Array]': 'array',
'[object Function]': 'function',
'[object Date]': 'date', // Object.prototype.toString.call(new Date())
'[object RegExp]': 'regExp',
'[object Map]': 'map',
'[object Set]': 'set',
'[object HTMLDivElement]': 'dom', // document.querySelector('#app')
'[object WeakMap]': 'weakMap',
'[object Window]': 'window', // Object.prototype.toString.call(window)
'[object Error]': 'error', // new Error('1')
'[object Arguments]': 'arguments',
}
let res = Object.prototype.toString.call(val)
if (!testType) {
return typeObj[res] //返回当前变量输入的类型
} else {
return typeObj[res] === testType //返回布尔值 判断该数据类型是否为传入的类型
}
}
console.log(checkType(123)); // number
console.log(checkType([], 'array')); //true
console.log(checkType(window)); //window