1、数据基本类型
- Function
- Object
- Array
- Undefined
- Null
- Boolean
- String
- Number
- Symbol
- Bigint
2、获取数据类型
const getType = (type) => {
return Object.prototype.toString .call(type).match(/\s+(\w+)/)[1]
}
解析
let type = function(){}
Object.prototype.toString.call(type);// [object Function]
match(/\s+(\w+)/)[1] // 匹配的就是空格后面的Function
3、判断目标是否为某个对象
const getType = (type) => {
return Object.prototype.toString.call(type).match(/\s+(\w+)/)[1]
}
const isType = (target,type) => {
return type.toLocaleLowerCase() === getType(target).toLocaleLowerCase()
}
4、Demo
let type1 = function(){}
let type2 = undefined
let type3 = null
let type4 = {}
let type5 = false
let type6 = '5'
let type7 = 5
let type8 = []
let type9 = Symbol('id')
let type10 = BigInt(10)
console.log(getType(type1));// Function
console.log(getType(type2));// Undefined
console.log(getType(type3));// Null
console.log(getType(type4));// Object
console.log(getType(type5));// Boolean
console.log(getType(type6));// String
console.log(getType(type7));// Number
console.log(getType(type9));// Symbol
console.log(getType(type10));// BigInt
console.log(isType(23,number)); // true
console.log(isType('前端面试资源',string)); // true
5、思考
通过上面的方法我们已经得到了一个完成的函数类型判断方法;而判断的主要逻辑是用
Object.prototype.toString.call(type).match(/\s+(\w+)/)[1]
获取字符串然后去做对比,那么
问题
为什么不直接用toString做判断了?
原因
Array,function等类型作为Object的实例都重写了toString方法
demo
console.log("jerry".toString());//jerry
console.log((1).toString());//1
console.log([1,2].toString());//1,2
console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)
console.log(function(){}.toString());//function (){}
console.log(null.toString());//error
console.log(undefined.toString());//error