本文介绍一个用于获取 JavaScript 变量类型的自定义函数。该函数首先处理 null 值,利用 typeof 判断基础类型,并通过 Object.prototype.toString 方法精确识别对象类型。代码包含获取构造函数名称的辅助逻辑,适用于需要严格类型判断的场景。
JavaScript 获取变量类型的实现原理
要实现获取变量类型的功能,需要编写特定的代码。以下提供的函数接收一个变量作为参数,并返回描述该变量类型的字符串。
// 定义正则表达式以匹配函数名
getType 函数源码解析
具体实现代码如下:
// 获取变量 x 的类型,返回类型名称字符串
function getType(x) {
// 如果变量 x 为 null,直接返回字符串 "null"
if (x == null) return "null";
// 使用 typeof 运算符获取初步类型
var t = typeof x;
// 如果 typeof 返回的不是 "object",说明是基础类型,直接返回该类型名称
if (t.toLocaleLowerCase() != "object") return t;
// 对于对象类型,调用 Object 原型的 toString 方法获取详细信息
// Object.prototype.toString 返回格式通常为 [object ClassName]
t = Object.prototype.toString.apply(x).toLowerCase();
// 从返回字符串中截取类名部分,去掉前8个字符和最后一个括号
t = t.substring(8, t.length - 1);
// 再次检查截取后的类型是否仍为普通 object
if (t.toLocaleLowerCase() != "object") return t;
// 验证 x 的构造函数是否指向 Object
if (x.constructor == Object) return t;
// 如果构造函数存在且为函数类型,则获取其名称
if (typeof x.constructor == "function")
}
return getFunctionName(x.constructor);
// 如果无法确定类型,返回未知类型提示
return "unknow type";
}
// 辅助函数:获取函数的名称
function getFunctionName(fn) {
// 确保传入的参数是函数类型,否则抛出错误
}
return name[1];
}