typeof返回字符串表示类型,但对null、数组等均返回"object",对nan/infinity返回"number",需配合array.isarray()或object.prototype.tostring.call()准确判断。

typeof 是 JavaScript 中用于检测变量或表达式数据类型的运算符,返回一个表示类型的字符串。它简单直接,但有几点关键行为必须清楚,否则容易误判。
typeof 返回的常见类型字符串
它对大多数基础类型返回直观结果:
- "string" — 字符串字面量或 String 对象(注意:new String() 会返回 "object")
-
"number" — 数值,包括 NaN 和 Infinity(
typeof NaN === "number") - "boolean" — true 或 false
- "undefined" — 未声明变量或显式赋值为 undefined
- "symbol" — ES6 新增的原始类型
-
"bigint" — ES11 新增,需用
123n语法创建 - "function" — 函数(包括箭头函数、方法、构造函数)
- "object" — 对象、数组、null、Date、RegExp、Map、Set 等(null 是最大陷阱)
特别注意 null 的问题
typeof null 返回 "object",这是 JavaScript 早期的历史 bug,但已被 ECMAScript 规范保留下来。因此不能靠 typeof 判断是否为 null:
- ✅ 正确判断 null:
value === null或Object.prototype.toString.call(value) === "[object Null]" - ❌ 错误写法:
typeof value === "object" && value !== null才能安全排除 null
区分数组和普通对象
数组也是 object,typeof [] 返回 "object"。若需识别数组,推荐:
-
Array.isArray(arr)— 最标准、最可靠的方式 -
Object.prototype.toString.call(arr) === "[object Array]"— 兼容性更强的老方法 - 避免用
arr instanceof Array— 跨 iframe 时可能失效
检测未声明变量的安全写法
直接 typeof undeclaredVar 不会报错,返回 "undefined";但 undeclaredVar 单独访问会抛 ReferenceError:
- ✅ 安全:
if (typeof myVar !== "undefined") { ... } - ✅ 检查全局变量是否存在:
typeof window.someGlobal === "undefined" - ❌ 危险:
if (myVar)可能因未声明而中断执行
不复杂但容易忽略细节,用好 typeof 关键是记住它的边界行为,尤其是 null 和对象子类型的处理。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











