最可靠的方式是用 typeof 判断 + 单独处理 null;javascript 7 种原始类型中仅 null 的 typeof 返回 "object",需显式判断,推荐封装 isprimitive 函数覆盖全部类型。

最可靠的方式是用 typeof 判断 + 单独处理 null。JavaScript 有 7 种原始类型:string、number、boolean、undefined、null、symbol、bigint,其中只有 null 会让 typeof 返回 "object",这是历史遗留问题,必须显式判断。
用 typeof 覆盖六种原始类型
typeof 对以下类型返回准确字符串,可直接比对:
typeof "abc" === "string"-
typeof 42 === "number"(含NaN和Infinity) typeof true === "boolean"typeof undefined === "undefined"typeof Symbol() === "symbol"-
typeof 123n === "bigint"(需环境支持)
必须单独判断 null
typeof null 返回 "object",语义错误,不能依赖它识别原始性:
- ❌ 错误写法:
typeof value === "object"推断为引用类型(会把null误判) - ✅ 正确做法:
value === null或Object.is(value, null) - 组合使用时,
null应作为独立条件与其他typeof判断并列
避免不可靠方法
以下方式不适用于原始类型判断:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
instanceof String:原始字符串字面量返回false -
value.constructor === String:null和undefined会报错,且包装对象才有效 -
Object.prototype.toString.call(value):虽能区分所有类型,但对原始值返回[object String]等,不如typeof直观高效
推荐封装 isPrimitive 工具函数
一个简洁、稳定、覆盖全部 7 种原始类型的判断函数:
<code>function isPrimitive(value) {<br> return value === null ||<br> typeof value === "string" ||<br> typeof value === "number" ||<br> typeof value === "boolean" ||<br> typeof value === "undefined" ||<br> typeof value === "symbol" ||<br> typeof value === "bigint";<br>}<br></code>
该函数不触发隐式转换,不访问可能不存在的属性,跨环境兼容性好,适合深拷贝、类型守卫等场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










