每日一题:实现类型判断
发表于:2024-12-10
字数统计:603 字
预计阅读3分钟
挑战介绍
本节我们来挑战一道大厂面试真题 —— 实现类型判断。
挑战准备
新建一个 getType.js 文件,在文件里写一个名为 getType 的函数,并导出这个函数,如下图所示:

这个文件在环境初始化时会自动生成,如果发现没有自动生成就按照上述图片自己创建文件和函数,函数代码如下:
js
function getType(target) {
// 补充代码
}
module.exports = getType;挑战内容
请封装一个函数,能够以字符串的形式精准地返回数据类型。
要求返回的类型全部由小写字母组成。
示例:
| 输入 | 输出 |
|---|---|
| true | 'boolean' |
| 100 | 'number' |
| 'abc' | 'string' |
| 100n | 'bigint' |
| null | 'null' |
| undefined | 'undefined' |
| Symbol('a') | 'symbol' |
| [] | 'array' |
| {} | 'object' |
| function fn() {} | 'function' |
| new Date() | 'date' |
| /abc/ | 'regexp' |
| new Error() | 'error' |
| new Map() | 'map' |
| new Set() | 'set' |
| new WeakMap() | 'weakmap' |
| new WeakSet() | 'weakset' |
注意事项
- 文件名、函数名不可随意更改。
- 文件中编写的函数需要导出,否则将无法提交通过。
题解
使用typeof打log发现,实例化对象、对象、null会显示object,其他能够使用typeof正常显示。
其中。null是因为一个古老的版本问题。那么我们可以逐个判断了:
js
function getType(target) {
const type = typeof target;
if (type !== "object") {
return type;
} else {
if (target === null) {
return "null";
}
if (Array.isArray(target)) {
return 'array'
}
if (target instanceof Date) {
return 'date'
}
if (target instanceof RegExp) {
return 'regexp'
}
if (target instanceof Error) {
return 'error'
}
if (target instanceof Map) {
return 'map'
}
if (target instanceof Set) {
return 'set'
}
if (target instanceof WeakMap) {
return 'weakmap'
}
if (target instanceof WeakSet) {
return 'weakset'
}
return 'object'
}
}
module.exports = getType;也可以调用Object对象的原型上的toString方法
js
function getType(target) {
var a = Object.prototype.toString;
return a.call(target).slice(8, -1).toLowerCase()
}你提供的函数
getType使用了Object.prototype.toString方法来获取目标值的类型,并且通过.slice(8, -1)来截取类型字符串的部分。这是一个非常有效的方式来获取数据类型的信息。
