最可靠的方式是结合 typeof 和显式判断 null:typeof 覆盖 string、number、boolean、undefined、symbol、bigint,再单独用 value === null 判断 null,共涵盖 es2020+ 的 7 种原始类型。

JavaScript 中检测一个值是否为原始类型(primitive),最可靠的方式是结合 typeof 和特殊值的显式判断。
用 typeof 覆盖大部分原始类型
typeof 对所有原始类型返回确定的字符串,但注意:null 是例外 —— 它会错误地返回 "object"。
原始类型共 7 种(ES2020+): string、number、boolean、undefined、symbol、bigint、null。
可用如下逻辑判断:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
typeof x === "string"→ 字符串 -
typeof x === "number"→ 数字(含NaN和Infinity) -
typeof x === "boolean"→ 布尔值 -
typeof x === "undefined"→ 未定义 -
typeof x === "symbol"→ Symbol -
typeof x === "bigint"→ BigInt -
x === null→ 单独判断null
排除对象类型(包括函数和数组)
原始类型的对立面是“非原始”,即对象类型(Object 及其派生,如 Array、Date、Function、class 实例等)。可借助:
-
typeof x === "function"→ 函数是对象,不是原始类型 -
x !== null && typeof x === "object"→ 普通对象、数组、正则等(null被排除) -
Object.prototype.toString.call(x)可进一步细分,但对原始性判断非必需
封装一个简洁可靠的判断函数
综合以上,推荐这个轻量函数:
function isPrimitive(value) {
const type = typeof value;
return (
type === "string" ||
type === "number" ||
type === "boolean" ||
type === "undefined" ||
type === "symbol" ||
type === "bigint" ||
value === null
);
}
它覆盖全部 7 种原始类型,不依赖全局构造器或 instanceof,也不受原型篡改影响,安全可靠。
注意避开常见误区
-
!value && typeof value !== "object"❌ —— 会把0、""、false等 falsy 原始值误判 -
Object(value) !== value❌ —— 对Symbol和BigInt不稳定,且null/undefined会报错 -
value?.constructor === undefined❌ ——undefined和null访问constructor会出错,且包装对象(如new String("a"))有 constructor 却不是原始值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










