Skip to content
本页目录

JS中基本数据类型以及他们的区别

JS中数据类型

null/undefined/boolean/number/string/symbol/biginit/object

其中symbol和bigInit是ES6新增的数据类型:

Symbol表示创建一个独一无二的不可变的数据,主要是为了解决全局变量冲突的问题。
BigInit是一种数字类型的数据,它可以表示任意精度格式的整数,使用BigInit可以安全的存储和操作大整数,Number能够展示最大数为2的53次方减一

基本数据类型

null/undefined/boolean/number/string/symbol

基本数据类型又称为原始数据类型,存储在栈(stack)内存中,

引用数据类型

对象、数组、函数、原生对象(Date、Reg、map)等

引用数据类型主要存储在堆内存中

基本数据类型和引用数据类型的存储位置不同点

基本数据类型直接存储在栈内存(stack)中,它们数据见得数据段,占用的空间小、大小固定、且频繁使用,所以存储在栈内存中,为了方便快速地读取,栈内存用于存储基本数据类型和引用数据类型的指针;
引用数据类型存储在堆内存(heap)中,特点就是占用空间大、大小不固定,如果存储在栈内存,频繁读取会影响性能,堆内存一般存储对象、函数、闭包等;
当解释器寻找引用数据类型的值时,会先从栈内存中取到引用数据类型的指针地址,然后从堆内存中取到对应的实体值。

堆栈的概念

堆和栈的概念存在于数据结构和 操作系统内存中,在数据结构中的区别如下:

在数据结构中,栈的数据存取方式为先进后出。
堆是一个优先队列,按照优先级来进行排序的,优先级可以按照内存大小规定。

在操作系统中,内存被区分为栈内存和堆内存:

栈内存由编译器自动分配和释放,存放基本数据类型和引用数据类型的内存地址
堆内存一般存储有开发分配释放,如果不释放则程序不会被垃圾回收机制回收,例如闭包,闭包是因为父函数的词法作用域无法被销毁,一直被引用。