大宇宇宇
发布于 2025-08-29 / 16 阅读
1
0

JS的数据类型,存储上的差异

#JS

在JavaScript中,我们可以分成两种类型:基本类型引用类型

1.基本类型

基本类型主要为以下6种:

  • Number

  • String

  • Boolean

  • Undefined

  • null

  • symbol

2.引用类型

  • Object创建 object 常⽤⽅式为对象字⾯量表⽰法,属性名可以是字符串或数值

  • ArrayJavaScript 数组是⼀组有序的数据,但跟其他语⾔不同的是,数组中每个槽位可以存储任意类型的数据。并且,数组也是动态⼤⼩的,会随着数据添加⽽⾃动增⻓)

  • Function函数实际上是对象,每个函数都是 Function 类型的实例,⽽ Function 也有属性和⽅法,跟其他引⽤类型⼀样)

  • 还包括Date、RegExp、Map、Set等

存储区别

基本数据类型和引用数据类型存储在内存中的位置不同:

  • 基本数据类型存储在栈中

  • 引用类型的对象存储于堆中

下面举个例子

1.基本类型

let a = 10;
let b = a; // 赋值操作
b = 20;
console.log(a); // 10值

console.log(a); // 10值

a 的值为⼀个基本类型,是存储在栈中,将 a 的值赋给 b ,虽然两个变量的值相等,但是两个变量

保存了两个不同的内存地址

2. 引⽤类型

var obj1 = {}
var obj2 = obj1;
obj2.name = "Xxx";
console.log(obj1.name); // xxx

引⽤类型数据存放在堆中,每个堆内存对象都有对应的引⽤地址指向它,引⽤地址存放在栈中。

obj1 是⼀个引⽤类型,在赋值操作过程汇总,实际是将堆内存对象在栈内存的引⽤地址复制了⼀份

给了 obj2 ,实际上他们共同指向了同⼀个堆内存对象,所以更改 obj2 会对 obj1 产⽣影响

小结

  • 声明变量时不同的内存地址分配:

  1. 简单类型的值存放在栈中,在栈中存放的是对应的值

  2. 引⽤类型对应的值存储在堆中,在栈中存放的是指向堆内存的地址

  • 不同的类型数据导致赋值变量时的不同:

  1. 简单类型赋值,是⽣成相同的值,两个对象对应不同的地址

  2. 复杂类型赋值,是将保存对象的内存地址赋值给另⼀个变量。也就是两个变量指向堆内存中同⼀个对象


评论