在JavaScript中进行数据类型检测时,typeof()方法不能检测数组,正则等对象,会被统一识别成Object对象,而每次都使用Object.prototype.toString.call()又过于繁琐,于是封装toType方法结合以上两种方法来进行数据类型检测。
通过结合typeof()方法和Object.prototype.toString.call()两种方法封装而成的toType方法:
//封装toType方法
(function () {
const toString = Object.prototype.toString;
let class2type = {};
['Array', 'RegExp', 'Date', 'Object', 'Error', 'Symbol', 'Null'].forEach(name => {
class2type[`[object ${name}]`] = name.toLowerCase();
});
function toType(obj) {
return typeof (obj) === 'object' ?
class2type[toString.call(obj)] :
typeof (obj);
}
window.toType = toType;
})()
//测试
console.log(toType('string'));
console.log(toType(123456));
console.log(toType({}));
console.log(toType([]));
console.log(toType(/^$/));
console.log(toType(null));
console.log(toType(undefined));
console.log(toType(() => {}));