JavaScript有7种基本类型:string、number、boolean、undefined、null、symbol、bigint;它们不可变、存于栈中、按值操作;其余均为Object及其派生的引用类型。

JavaScript 数据类型共 8 种,分为 7 种基本类型(原始类型)和 1 种引用类型(Object 及其派生类型)。判断时不能只靠 typeof,需按场景组合使用多种方法,尤其注意 null 和数组等常见误判点。
基本类型有哪 7 种?
它们是不可变的、直接存于栈中、赋值拷贝值、用 === 比较值:
-
String(字符串):如
"hello" -
Number(数值):包括整数、浮点数、
NaN、+Infinity、-Infinity -
Boolean(布尔值):仅
true和false - undefined(未定义):变量声明未赋值时的默认值
-
null(空值):有意赋的空对象指针,是独立类型,但
typeof null错误返回"object" - Symbol(符号):ES6 新增,保证唯一性,常用于对象属性键
-
BigInt(大整数):ES2020 新增,用
n后缀表示,如123n,可安全表示超大整数
引用类型其实都属于 Object
所有非基本类型的值,本质都是 Object 的实例或子类,数据存在堆中,变量只存地址:
-
Object:普通对象,如
{ name: "a" } -
Array:数组,虽常用但不是语言一级类型,是
Object的子类 -
Function:函数,在 JS 中是一等公民,
typeof返回"function" - Date、RegExp、Error、Map、Set、Promise 等也都是内置构造函数创建的对象
怎么准确判断一个值的类型?
单靠一种方法会出错。推荐分层判断逻辑:
- 先用
typeof快速识别 6 种基本类型(string、number、boolean、undefined、symbol、bigint),它对这些返回准确小写字符串 - 单独用
value === null判断null,这是最安全方式 - 对数组,优先用
Array.isArray(value),它跨 iframe 安全、语义明确 - 其余情况统一用
Object.prototype.toString.call(value),它返回形如"[object Array]"或"[object Date]"的标准内部标签,覆盖所有内置类型
为什么不能只用 typeof?
它的局限很实际:
-
typeof null→"object"(历史 bug,必须单独处理) -
typeof []、typeof {}、typeof new Date()都返回"object",无法区分 -
typeof function() {}虽返回"function",但typeof class C {}仍是"function",不反映语法差异 -
instanceof在跨 iframe 场景下可能失效(不同全局环境的Array构造函数不等价)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











