typeof 可靠识别6种原始类型,但对null和引用类型返回"object",需结合=== null、array.isarray()及object.prototype.tostring.call()精准判断。

typeof 是 JavaScript 中最常用的基础类型检测工具,但它在某些场景下并不“准确”——尤其对 null、数组、对象、日期等引用类型会统一返回 "object",对函数返回 "function"(虽属历史遗留但已成规范)。要“准确检测”,关键在于理解 typeof 的能力边界,并配合其他方法补足。
typeof 能可靠识别的原始类型
它对以下 6 种原始类型(primitive)的判断是稳定且推荐使用的:
-
string→typeof "abc" === "string" -
number→typeof 42 === "number"(包括NaN和Infinity) -
boolean→typeof true === "boolean" -
undefined→typeof undefined === "undefined"(也适用于未声明变量,如typeof undeclaredVar不报错) -
symbol→typeof Symbol() === "symbol" -
bigint→typeof 123n === "bigint"(注意末尾n)
typeof 对 null 和引用类型的“失准”及应对
typeof null 返回 "object",这是 JavaScript 最著名的 bug(源于早期实现的二进制标识误判),至今未修复以保持兼容性。而所有对象、数组、正则、日期等,typeof 都返回 "object" 或 "function"(仅函数例外):
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
typeof null === "object"→ ❌ 误判,需单独用value === null检测 -
typeof [] === "object"→ ❌ 无法区分数组,改用Array.isArray(value) -
typeof new Date() === "object"→ ❌ 改用value instanceof Date或Object.prototype.toString.call(value) === "[object Date]" -
typeof /regex/ === "object"(旧版)或"function"(某些环境)→ 推荐统一用Object.prototype.toString.call(value)
更可靠的类型检测组合方案
当需要精确到具体引用类型时,不要只依赖 typeof,而是分层判断:
- 先用
typeof快速排除原始类型(尤其是"string"/"number"/"undefined"等) - 再判断是否为
null:value === null - 再判断是否为函数:
typeof value === "function"(现代环境基本可靠) - 其余统一走
Object.prototype.toString.call(value),它能返回标准字符串如"[object Array]"、"[object Map]"等
例如封装一个较准的类型检查函数:
function getTrueType(value) {
if (value === null) return 'null';
const type = typeof value;
if (type !== 'object') return type;
return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
}
// getTrueType([]) → 'array'
// getTrueType(null) → 'null'
// getTrueType(new Set()) → 'set'
特别注意:typeof 对未定义变量的安全性
typeof 是唯一能在不报错前提下检测未声明变量的方式:
-
typeof undeclaredVariable === "undefined"✅ 安全 -
undeclaredVariable === undefined❌ 报 ReferenceError - 因此常用于检测全局 API 是否存在,如
typeof Promise !== "undefined"
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










