JavaScript中数据类型的存储
区别:
两种类型的区别是:存储位置不同
基本数据类型
原始数据类型是直接存储在栈(stack)中的简单数据段。因为占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
引用数据类型
引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能。
JavaScript中的引用数据类型有:
Array
Object
Function
引用数据类型是保存在堆内存中的,然后再栈内存中保存一个对堆内存中实际对象的引用(栈内存中保存了一个地址)。所以,JavaScript中对引用数据类型的操作都是操作对象的引用而不是实际的对象。 (这种说法不严密,当复制保存着对象的某变标量时,操作的是对象的引用。但在为对象添加属性时,操作的是实际的对象。)
复制变量值
除了保存的方式不同之外,在从一个变量像另一个变量复制基本类型值和引用类型值是时,也存在不同。
基本数据类型
对于基本类型值,如果进行复制,会为新的变量在栈内存中分配一个新值。
引用数据类型
对于对象、数组这样的引用数据类型,如果进行复制,会为新的变量在栈内存中分配一个新值,但是这个值仅仅是一个地址。也就是说,复制出来的变量和原有的变量具有相同的地址,指向堆内存中的同一个对象。
为什么基础数据类型存在栈中,而引用数据类型存在堆中呢?
1.堆比栈空间大,栈比堆运行速度快。
2.堆内存是无序存储,可以根据引用直接获取。
3.基础数据类型比较稳定,而且相对来说占用的内存小。
4.引用数据类型大小是动态的,而且是无限的。