typeof 能准确识别 string、number、boolean、undefined、function、symbol、bigint 七种类型,但对 null 返回 "object",且无法区分对象、数组、日期等具体类型,需结合 Object.prototype.toString.call 等方法精准判断。

typeof 是 JavaScript 中用于检测值的数据类型的运算符,它返回一个表示类型名称的字符串,比如 "string"、"number"、"function" 等。
typeof 能识别哪些类型?
它对大部分基本类型判断准确:
-
typeof "hello"→"string" -
typeof 42→"number" -
typeof true→"boolean" -
typeof undefined→"undefined" -
typeof function(){}→"function" -
typeof Symbol("a")→"symbol" -
typeof BigInt(123)→"bigint"
typeof 的主要局限性
它在几个关键场景下表现不可靠:
-
null 返回 "object":这是历史遗留 bug,
typeof null结果是"object",而非预期的"null" -
对象和数组都返回 "object":普通对象、数组、正则、日期、Map、Set 等,只要不是函数或原始值,一律返回
"object",无法区分具体构造类型 -
无法识别内置类实例(如 Array、Date):例如
typeof new Date()和typeof []都是"object" -
ES6+ 新增类型支持不完整:虽然支持
Symbol和BigInt,但对Promise、Proxy、TypedArray等仍返回"object"
替代方案建议
需要更精确判断时,可组合使用其他方法:
立即学习“Java免费学习笔记(深入)”;
- 用
Object.prototype.toString.call(value)获取规范类型标签,如[object Array]、[object Date] - 对 null 单独用
value === null判断 - 数组可用
Array.isArray(value) - 函数可继续用
typeof value === "function"(目前最可靠)
typeof 简单轻量,适合快速筛查基本类型,但不能作为类型判断的唯一依据。实际开发中,常需结合其他手段才能准确识别复杂值的类型。











