JavaScript有7种基本数据类型:string、number、boolean、undefined、symbol、bigint和null;其中typeof可准确识别前6种,但null会误判为"object",需用===或Object.prototype.toString.call()检测。

JavaScript 中只有 7 种基本数据类型,不是 5 种,也不是 6 种——BigInt 和 Symbol 都是正式的、不可修改的基本类型。
基本类型列表及判断方式
用 typeof 可以准确识别其中 6 种(null 是例外):
-
"string":字面量如"hello" -
"number":包括42、3.14、NaN、Infinity -
"boolean":仅true和false -
"undefined":未赋值变量或缺失属性值 -
"symbol":通过Symbol()创建,保证唯一性 -
"bigint":后缀n,如123n,不能与number混算 -
"object":但typeof null === "object"——这是历史 bug,不是类型归属
要真正区分 null,必须显式用 value === null 或 Object.prototype.toString.call(value) === "[object Null]"。
常见误判场景
这些“看起来像基本类型”的值,其实不是基本类型:
立即学习“Java免费学习笔记(深入)”;
-
new String("a")是对象,typeof返回"object" -
new Number(42)同样是对象,不是"number" -
document.all是浏览器特例,typeof返回"undefined",但它既不是undefined也不是基本类型 -
NaN是number类型,但不等于自身:NaN === NaN为false
为什么 typeof null 返回 "object"?
这是 V8 引擎早期实现时的二进制位判断缺陷:null 的底层表示全为 0,被误判为对象指针。ECMAScript 标准已明确 null 是独立基本类型,但为兼容性保留了这个行为。
Android 手机程序员向导,因为偶尔的机会接触了Android这个平台,但是自己以前没有接触过这类的编程资料,网上的资料也都寥寥无几,于是自己根据国外的资料翻译了一些,用尽了自己所有的翻译水平,我相信这将是国内一本非常全面、基础型的Android 编程教程,对你应该有帮助。
所以实际检测中,不要依赖 typeof 判断是否为 null:
function isNull(value) {
return value === null;
}
基本类型 vs 对象类型的本质区别
基本类型按值传递、不可变、无原型链;对象类型按引用传递、可添加属性、继承自 Object.prototype(除 Object.create(null))。
一个容易忽略的细节:String、Number、Boolean 构造函数创建的是包装对象,它们在 == 比较中会自动拆箱,但在 === 下和字面量不等:
console.log(new String("a") == "a"); // true
console.log(new String("a") === "a"); // false
绝大多数时候,你应该只用字面量形式,避免意外创建包装对象。










