8种基本数据类型
numberstringbooleannullundefinedsymbolbigintobject
基本类型和引用类型
前7种为基本类型,最后一种为引用类型。
其中,引用类型中包括
array数组object对象function函数- 特殊对象:
Date、RegExp - ES6新增类型
set、map、weakSet、weakMap等。
关于数组可以这么理解:数组的键是按顺序排列的索引,值就是当前值,因此可以看作是一种特殊的对象。
基本类型和引用类型的区别
- 基本类型按值访问,引用类型按引用访问
- 基本类型按值存储在栈内存中
- 引用类型按引用存储,指针存在栈内存中,指针指向的具体内容存储在堆内存
- 基本类型不能动态添加属性
栈内存和堆内存
放上《高程3》上的图。
基本类型的值复制:

引用类型的值复制:

先忽略复制后的变量对象,从图中可以看到基本类型和引用类型的存储方式。对于引用类型的那个图中,左边就是栈内存,右边是堆内存。基本类型直接将值存储在栈内存中,引用类型将指针存储在栈内存中。
然后在考虑一下复制问题,从图中可以看到:
- 基本类型的复制是另开一个空间,存储与被复制值相同的值
- 引用类型的复制也在栈内存中另开了一个空间,但两个对象的指针指向堆内存中的同一个值
深拷贝
由上面引用类型的复制问题可以知道,当obj2中的值发生变化时,obj1也会变化。因为obj2值的变化实际上是堆内存中的对象发生变化,而obj1和obj2指向同一个对象,因此他们的变化是同步的。
let obj1= {
a:1, b:2};
let obj2 = obj1;
console.log(obj1) // {a: 1, b: 2}
console.log(obj2) // {a: 1, b: 2}
obj1.a = 2;
console.log(obj1) // {a: 2, b: 2}
console

本文介绍了JavaScript中的变量存储,包括8种基本数据类型和引用类型的区别,阐述了栈内存与堆内存的工作原理,讨论了深拷贝的实现方式,并深入分析了0.1 + 0.2不等于0.3的原因及解决方案。
最低0.47元/天 解锁文章
877

被折叠的 条评论
为什么被折叠?



