JavaScript数据类型分为基本类型和引用类型:基本类型有7种(string、number、boolean、null、undefined、symbol、bigint),按值访问存于栈;引用类型均为对象,按引用访问,地址存栈、数据存堆。
JavaScript 数据类型分为 基本类型(原始类型) 和 引用类型(对象类型) 两大类。核心区别在于:基本类型按值访问,存储在栈内存中;引用类型按引用访问,实际数据存在堆内存中,变量只保存指向它的地址。
共 7 种(ES2025 新增 BigInt,ES2015 新增 Symbol):
"hello"
42、3.14;也包含 NaN 和 Infinity
true 和 false
typeof null 返回 "object",属历史遗留 bug)n 结尾,如 123n
所有非基本类型的值都属于引用类型,本质是对象(Object 的实例)。常见包括:
{ name: "Alice" }
[1, 2, 3](虽语法特殊,但仍是 Object 子类型)差异主要体现在 存储方式、赋值行为 和 比较逻辑 上:
== 或 === 比较值是否相等;
引用类型用 === 比较的是地址是否相同(即是否为同一对象),不是内容相等没有单一方法能完美识别所有类型,需组合使用:
typeof:适合基本类型("string"、"number" 等),但对 null 返回 "object",对数组、正则等也返回 "object" 或 "function"
instanceof:检测是否为某构造函数的实例(如 arr instanceof Array),但跨 iframe 失效Object.prototype.toString.call():最可靠通用方式,返回形如 "[object Array]" 的字符串,可准确区分内置引用类型Array.isArray():专用于判断是否为数组Number.isNaN()、Number.isFinite() 等:针对 number 类型的精细判断