JavaScript数据类型分为基本类型和引用类型:基本类型有7种(string、number、boolean、null、undefined、symbol、bigint),按值访问存于栈;引用类型均为对象,按引用访问,地址存栈、数据存堆。

JavaScript 数据类型分为 基本类型(原始类型) 和 引用类型(对象类型) 两大类。核心区别在于:基本类型按值访问,存储在栈内存中;引用类型按引用访问,实际数据存在堆内存中,变量只保存指向它的地址。
JavaScript 的基本类型有哪些
共 7 种(ES2020 新增 BigInt,ES2015 新增 Symbol):
-
string:表示文本,如
"hello" -
number:包括整数和浮点数,如
42、3.14;也包含NaN和Infinity -
boolean:只有两个值:
true和false -
null:表示“空值”,是独立类型(但
typeof null返回"object",属历史遗留 bug) - undefined:变量声明未赋值时的默认值,或函数无返回时的结果
- symbol(ES6):唯一且不可变的值,常用于对象属性键,避免命名冲突
-
bigint(ES2020):表示任意精度的整数,字面量以
n结尾,如123n
JavaScript 的引用类型有哪些
所有非基本类型的值都属于引用类型,本质是对象(Object 的实例)。常见包括:
-
Object:普通对象,如
{ name: "Alice" } -
Array:数组,如
[1, 2, 3](虽语法特殊,但仍是Object子类型) - Function:函数,在 JS 中是一等公民,也是对象
- Date、RegExp、Error 等内置构造器创建的实例
- Map、Set、WeakMap、WeakSet(ES6+)
- Promise、Proxy、Reflect 等(ES6+)
- 自定义构造函数或 class 创建的实例
基本类型与引用类型的关键差异
差异主要体现在 存储方式、赋值行为 和 比较逻辑 上:
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
立即学习“Java免费学习笔记(深入)”;
- 内存位置不同:基本类型直接存值于栈内存;引用类型变量存的是堆内存中的地址(指针),真实数据在堆里
- 赋值是复制还是共享: 基本类型赋值 = 值拷贝(互不影响); 引用类型赋值 = 地址拷贝(多个变量指向同一块堆内存,修改会影响彼此)
-
比较方式不同:
基本类型用
==或===比较值是否相等; 引用类型用===比较的是地址是否相同(即是否为同一对象),不是内容相等 - 可变性不同:基本类型不可变(每次操作都产生新值);引用类型可变(可增删改属性/元素)
如何判断数据类型
没有单一方法能完美识别所有类型,需组合使用:
-
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 类型的精细判断










