typeof 能准确识别除 null 外的六种原始类型(string/number/boolean/undefined/symbol/bigint)和函数,返回小写字符串;但对 null 返回 "object",需单独用 === 或 object.is 判断。

typeof 操作符能准确识别除 null 外的所有原始类型,返回值是小写的字符串,比如 "string"、"number"。但它对 null 返回 "object",这是历史遗留问题,必须单独处理。
能直接靠 typeof 精准判断的原始类型
以下六种原始类型用 typeof 判断是可靠且推荐的:
-
typeof "hello"→"string" -
typeof 42(含NaN和Infinity)→"number" -
typeof true→"boolean" -
typeof undefined→"undefined"(未声明变量也不会报错) -
typeof Symbol("id")→"symbol" -
typeof 123n→"bigint"(需运行环境支持)
null 是唯一需要特殊对待的原始类型
null 是原始值,但 typeof null 返回 "object",语义错误,不能依赖它做判断:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ❌
typeof value === "object"无法区分null和普通对象 - ✅ 正确方式:
value === null或Object.is(value, null) - 若需统一检测“空值”,可组合:
value === null || typeof value === "undefined"
函数虽非原始类型,但 typeof 对它有专属返回
typeof 对函数(包括普通函数、箭头函数、class 构造器)统一返回 "function",这在实践中很实用:
-
typeof function() {}→"function" -
typeof () => {}→"function" -
typeof {}或typeof []→ 都是"object"(数组不是原始类型) - 因此,
typeof可安全用于“是否为函数”的判断,但不能区分数组、正则、日期等对象子类型
实际使用建议:轻量预检 + 必要补充
日常开发中,typeof 最适合做快速类型守卫,尤其配合逻辑运算符:
- 检查变量是否已定义且为字符串:
typeof str === "string" && str.length > 0 - 安全调用可能为
undefined的方法:typeof obj?.method === "function" && obj.method() - 避免对非数字执行算术:
typeof input === "number" && !isNaN(input) - 遇到
null或需精确识别对象子类型(如数组、日期)时,再叠加Array.isArray()或Object.prototype.toString.call()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










