js中封装获取数据类型的函数

702 阅读1分钟

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'