typeof对原始类型的返回值确定:undefined→"undefined"、null→"object"(历史bug)、boolean→"boolean"、number→"number"、string→"string"、symbol→"symbol"、bigint→"bigint";判断null需用===,对象类型需结合Array.isArray()等进一步识别。

typeof 是 JavaScript 中用于检测值类型的运算符,它对原始类型(primitive types)的返回结果是确定且固定的。理解这些结果有助于避免类型判断中的常见误区。
原始类型对应的 typeof 结果
JavaScript 有 7 种原始类型(ES2020 新增 bigint),typeof 对它们的返回值如下:
-
undefined→"undefined" -
null→"object"(这是历史遗留 bug,但已成标准,需特别注意) -
boolean→"boolean" -
number→"number" -
string→"string" -
symbol→"symbol" -
bigint→"bigint"
为什么 typeof null 返回 "object"
这源于 JavaScript 最初实现时的底层设计:null 被表示为全零的机器码,与对象指针的空值形式一致,因此被错误归类为 object。尽管 ECMAScript 规范早已明确 null 是独立原始类型,但为保持兼容性,typeof null 仍返回 "object"。
若需准确判断 null,应显式使用严格相等:value === null。
立即学习“Java免费学习笔记(深入)”;
typeof 对非原始值的行为补充说明
虽然问题聚焦原始类型,但实际使用中容易混淆,需留意:
- 函数(
function)→"function"(函数在 JS 中是对象的子类型,但 typeof 单独识别) - 普通对象、数组、正则、日期等 → 全部返回
"object" - 箭头函数、class 声明的构造函数 → 同样返回
"function" -
undefined变量或未声明标识符 →"undefined"(不会报错)
实用建议:安全检测原始类型
仅靠 typeof 不足以区分所有类型(如数组 vs 普通对象)。若需精准识别原始类型,可组合使用:
- 先用 typeof 排除对象和函数
- 再用
=== null单独判断 null - 对
"object"结果,配合Array.isArray()或Object.prototype.toString.call()进一步识别
例如判断是否为字符串原始值:typeof value === "string" && value.constructor === String(更稳妥写法是 typeof value === "string",因字符串字面量必为原始值)。










