typeof 返回表示运行时类型的字符串,但存在历史遗留问题:null 返回 "object"(因早期空指针全零被误判),对象统一返回 "object",函数返回 "function",精准识别需用 object.prototype.tostring.call()。

typeof 是 JavaScript 中用于检测值的**运行时类型**的运算符,它返回一个表示类型的字符串。但要注意:它的行为并不完全直观,尤其对 null、对象和某些特殊值有历史遗留问题。
基础用法与常见返回值
语法很简单:typeof value,返回值是小写字符串:
-
typeof 42→"number" -
typeof "hello"→"string" -
typeof true→"boolean" -
typeof undefined→"undefined" -
typeof function() {}→"function" -
typeof Symbol("a")→"symbol" -
typeof BigInt(123)→"bigint"
null 的陷阱:返回 "object"
这是 JavaScript 最著名的 bug(但已成事实标准,不会修复):
-
typeof null返回"object",而非"null" - 原因:早期 JavaScript 实现中,null 被设计为指向空对象引用的 32 位空指针,其二进制全为 0,类型标签恰好被识别为 object
- 判断是否为 null,请用严格相等:
value === null
对象类型统一返回 "object"(除函数外)
所有普通对象、数组、日期、正则、Map、Set 等,typeof 都返回 "object":
-
typeof {}→"object" -
typeof []→"object" -
typeof new Date()→"object" -
typeof /abc/→"object" -
typeof new Map()→"object"
若需精确识别具体对象类型,应配合 Object.prototype.toString.call():
-
Object.prototype.toString.call([])→"[object Array]" -
Object.prototype.toString.call(new Date())→"[object Date]" -
Object.prototype.toString.call(null)→"[object Null]"(可补 typeof 对 null 的不足)
function 的特殊性
在大多数引擎中,typeof 对函数返回 "function",这是少数能准确区分的“对象子类”:
-
typeof function() {}→"function" -
typeof class C {}→"function"(ES6 类本质仍是函数) -
typeof () => {}→"function"(箭头函数也返回 function)
但注意:某些宿主对象(如 IE 中的 document.all)可能返回 "undefined" 或其他非标准值,属环境特例,现代环境基本无需考虑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











