typeof 是 JavaScript 中基础类型检测方式,但对引用类型不精确:原始类型基本准确,null 返回 "object" 是历史 bug,除函数外所有对象均返回 "object";需结合 Array.isArray、Object.prototype.toString.call 等方法补足。

typeof 是 JavaScript 中最常用的基础类型检测方式,它返回一个表示数据类型的字符串。但要注意:它的结果有局限性,尤其对引用类型不够精确。
基础用法与常见返回值
对原始类型(primitive)基本准确:
-
typeof 42→"number" -
typeof "hello"→"string" -
typeof true→"boolean" -
typeof undefined→"undefined" -
typeof null→"object"(这是历史遗留 bug,需特别注意) -
typeof Symbol()→"symbol" -
typeof BigInt(123)→"bigint"
引用类型的表现与陷阱
除函数外,其他对象类型均返回 "object":
-
typeof []→"object" -
typeof {}→"object" -
typeof new Date()→"object" -
typeof /regex/→"object" -
typeof function() {}→"function"(唯一例外)
因此不能单靠 typeof 区分数组、日期、正则等类型。
立即学习“Java免费学习笔记(深入)”;
如何补足 typeof 的不足
结合其他方法提升准确性:
- 判断数组:
Array.isArray(value)或Object.prototype.toString.call(value) === "[object Array]" - 判断 null:
value === null(因为typeof null错误返回"object") - 通用精准检测:
Object.prototype.toString.call(value).slice(8, -1).toLowerCase(),可得"array"、"date"、"regexp"等
实际使用建议
日常开发中推荐组合策略:
- 快速区分原始类型和函数?用
typeof足够高效 - 需要确认是否为数组、日期等具体对象类型?优先用专用方法(如
Array.isArray)或toString.call - 写工具函数时,避免单独依赖
typeof value === "object"来判断对象,应排除null
不复杂但容易忽略。


















