typeof 能准确区分 number、string、boolean 原始类型,分别返回 "number"、"string"、"boolean";对包装对象则统一返回 "object",且不推荐用 instanceof 等替代方案。

直接用 typeof 就能准确区分 Number、String 和 Boolean 这三种原始类型——它们各自返回唯一的字符串,不存在歧义。
用 typeof 判断最直接有效
typeof 对这三类原始值的返回结果稳定且互斥:
-
typeof 42→"number" -
typeof "hello"→"string" -
typeof true→"boolean"
注意:这些结果不会因值的内容变化而改变,比如 typeof "123" 仍是 "string",typeof 0 仍是 "number",typeof false 仍是 "boolean"。不需要额外处理边界情况。
别被包装对象干扰判断
JavaScript 允许用 new String()、new Number()、new Boolean() 创建对应类型的对象,但它们属于引用类型,不是原始类型:
-
typeof new String("a")→"object" -
typeof new Number(42)→"object" -
typeof new Boolean(true)→"object"
所以只要 typeof 返回 "number"/"string"/"boolean",就一定是原始值;若返回 "object",再进一步确认是否为包装对象(一般业务代码中极少显式使用包装对象)。
不推荐用其他方式替代 typeof
有些方法看似可行,但有明显缺陷:
-
instanceof:原始值不继承自任何构造函数,"abc" instanceof String是false;只对new String()有效,适用面窄 -
Object.prototype.toString.call():虽然能返回"[object String]"等,但多此一举——它对原始值和包装对象返回相同结果,无法单独区分类型本质 -
constructor:原始值的constructor属性会隐式指向String/Number/Boolean,但这是语言内部装箱行为,不稳定也不应依赖
小提醒:null 和 undefined 不在这三类里
null 和 undefined 是独立的原始类型,typeof null 返回 "object"(历史 bug),typeof undefined 返回 "undefined"。它们和 Number、String、Boolean 并列,不属于这三者中的任何一个。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











