JavaScript中的数据类型包含简单数据类型(值类型)和复杂数据类型(引用类型),简单类型:Number、String、Boolean、Null、Undefined,通过typeof关键字可获取简单数据类型(Null比较特殊返回'object'),复杂类型:Object、Function、Array使用typeof无法准确获取其类型,需要借助Object.prototype.toString()方法或者constructor属性。以下通过两种方法实现。
方法一:结合typeof关键字和原型上的constructor属性
function getType(param) {
if (typeof param === 'object' && param !== null) {
// constructor属性位于实例对象的原型上,实例对象可直接访问到,可获取该实例对象的构造函数的名称
return param.constructor.name.toLowerCase()
} else {
return param === null ? 'null' : typeof param
}
}
console.log(getType(123)); // 'number'
console.log(getType('123')); // 'string'
console.log(getType(false)); // 'boolean'
console.log(getType(null)); // 'null'
console.log(getType(undefined)); // 'undefined'
console.log(getType([1, 2, 3])); // 'array'
console.log(getType({ a: 1 })); // 'object'
console.log(getType(function () { })); // 'function'
方法二:万能公式Object.prototype.toString(),适用简单类型和复杂类型
function getType(param) {
// -1 表示从字符串的后面开始截取, 街去掉1个字符串
return Object.prototype.toString.call(param).slice(8, -1);
}
console.log(getType(123)); // 'Number'
console.log(getType('123')); // 'String'
console.log(getType(false)); // 'Boolean'
console.log(getType(null)); // 'Null'
console.log(getType(undefined)); // 'Undefined'
console.log(getType([1, 2, 3])); // 'Array'
console.log(getType({ a: 1 })); // 'Object'
console.log(getType(function () { })); // 'Function'