写一个判断数据类型的方法
/**
* 判断数据类型
* @param {*} data 需要判断类型的变量
* @returns {string} 返回数据类型字符串
*/
function getType(data) {
const type = Object.prototype.toString.call(data);
switch (type) {
case '[object String]':
return 'String';
case '[object Number]':
return 'Number';
case '[object Boolean]':
return 'Boolean';
case '[object Null]':
return 'Null';
case '[object Undefined]':
return 'Undefined';
case '[object Symbol]':
return 'Symbol';
case '[object Object]':
return 'Object';
case '[object Array]':
return 'Array';
case '[object Function]':
return 'Function';
case '[object Date]':
return 'Date';
case '[object RegExp]':
return 'RegExp';
case '[object Map]':
return 'Map';
case '[object Set]':
return 'Set';
case '[object WeakMap]':
return 'WeakMap';
case '[object WeakSet]':
return 'WeakSet';
case '[object BigInt]':
return 'BigInt';
default:
return 'Unknown';
}
}
// 测试用例
console.log(getType("hello")); // String
console.log(getType(123)); // Number
console.log(getType(true)); // Boolean
console.log(getType(null)); // Null
console.log(getType(undefined)); // Undefined
console.log(getType(Symbol())); // Symbol
console.log(getType({})); // Object
console.log(getType([])); // Array
console.log(getType(function(){})); // Function
console.log(getType(new Date())); // Date
console.log(getType(/abc/)); // RegExp
console.log(getType(new Map())); // Map
console.log(getType(new Set())); // Set
console.log(getType(new WeakMap())); // WeakMap
console.log(getType(new WeakSet())); // WeakSet
console.log(getType(123n)); // BigInt
// 简化版 (使用 typeof 和 instanceof,但不完全可靠)
function simpleGetType(data) {
if (data === null) return 'Null'; // 特殊处理 null
const type = typeof data;
if (type !== 'object') return type; // 基本类型直接返回
if (data instanceof Array) return 'Array';
if (data instanceof Date) return 'Date';
if (data instanceof RegExp) return 'RegExp';
return 'Object'; // 其他对象类型
}
// 简化版测试用例 (注意:简化版对某些类型的判断可能不准确)
console.log(simpleGetType("hello")); // String
console.log(simpleGetType(123)); // Number
console.log(simpleGetType(true)); // Boolean
console.log(simpleGetType(null)); // Null
console.log(simpleGetType(undefined)); // undefined
console.log(simpleGetType(Symbol())); // symbol
console.log(simpleGetType({})); // Object
console.log(simpleGetType([])); // Array
console.log(simpleGetType(function(){})); // function
console.log(simpleGetType(new Date())); // Date
console.log(simpleGetType(/abc/)); // RegExp
console.log(simpleGetType(new Map())); // Object (简化版无法区分 Map)
console.log(simpleGetType(new Set())); // Object (简化版无法区分 Set)
说明:
-
getType()
(推荐): 这个函数使用Object.prototype.toString.call(data)
方法,这是判断 JavaScript 数据类型最稳妥的方式,可以准确地区分各种内置对象类型,包括Map
、Set
、WeakMap
、WeakSet
等。 -
simpleGetType()
(简化版): 这个函数使用typeof
和instanceof
运算符,代码更简洁,但在某些情况下可能不够精确。例如,它无法区分Map
、Set
和普通对象,都会返回 'Object'。 如果只需要区分基本类型和少数几种常见对象类型,可以使用这个简化版。
选择哪个版本取决于你的具体需求。 如果需要更精确的类型判断,建议使用 getType()
。 如果只需要简单的类型判断,可以使用 simpleGetType()
。
补充:
- 关于 null:
typeof null
会返回 "object",这是一个历史遗