判断变量是否为原始类型值的正确方法是:typeof值为'string'、'number'、'boolean'、'undefined'、'symbol'、'bigint',或值严格等于null;该方式覆盖全部7种原始类型,排除对象及包装对象,逻辑清晰且无兼容性陷阱。

判断一个变量是否为原始类型值,核心是准确覆盖全部7种原始类型:string、number、boolean、undefined、symbol、bigint、null,同时排除所有对象(包括包装对象、数组、函数、日期等)。
用 typeof + 显式 null 判断最稳妥
这是推荐的通用方式,逻辑清晰、兼容性好、无历史陷阱:
-
不要只依赖
typeof value !== 'object'—— 它会把null当作原始值(错误),又把function和undefined当作“非对象”而误判为原始值(混淆) -
避免
Object(value) !== value—— 对document.all等非标准值可能返回意外结果,且无法单独处理null - 正确写法是逐个检查
typeof结果,并显式包含value === null
原始类型的7种完整清单不能漏
截至2026年,JavaScript 原始类型共7种,缺一不可:
typeof value === 'string'typeof value === 'number'typeof value === 'boolean'typeof value === 'undefined'typeof value === 'symbol'typeof value === 'bigint'-
value === null(唯一typeof null返回'object'的例外)
常见误判场景要避开
这些写法看似省事,但实际不可靠:
-
typeof value !== 'object' && typeof value !== 'function':漏掉null,且把undefined和symbol当作“非对象”就默认是原始值——逻辑不闭环 -
!value && typeof value !== 'boolean':完全混乱,0、''、false都会干扰判断 -
value.constructor === String等基于构造器的方式:对null、undefined直接报错,且原始字符串没有constructor属性(只有包装对象才有)
可直接复用的健壮判断函数
以下函数已在现代环境(含 BigInt 支持)中验证有效:
function isPrimitive(value) {
const type = typeof value;
return (
type === 'string' ||
type === 'number' ||
type === 'boolean' ||
type === 'undefined' ||
type === 'symbol' ||
type === 'bigint' ||
value === null
);
}
它不依赖任何全局篡改、不触发隐式转换、不访问可能不存在的属性,能稳定区分 new String('x')(对象,返回 false)和 'x'(原始值,返回 true)。

















