JavaScript两种数据类型的存储方式

Posted wzp-monkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript两种数据类型的存储方式相关的知识,希望对你有一定的参考价值。

javascript中数据类型的存储

区别:

两种类型的区别是:存储位置不同

基本数据类型

原始数据类型是直接存储在栈(stack)中的简单数据段。因为占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。

引用数据类型

引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能。

JavaScript中的引用数据类型有:

Array

Object

引用数据类型是保存在堆内存中的,然后再栈内存中保存一个对堆内存中实际对象的引用(栈内存中保存了一个地址)。所以,JavaScript中对引用数据类型的操作都是操作对象的引用而不是实际的对象。 (这种说法不严密,当复制保存着对象的某个标量时,操作的是对象的引用。但在为对象添加属性时,操作的是实际的对象。)

复制变量值

除了保存的方式不同之外,在从一个变量像另一个变量复制基本类型值和引用类型值是时,也存在不同。

基本数据类型

对于基本类型值,如果进行复制,会为新的变量在栈内存中分配一个新值。

引用数据类型

对于对象、数组这样的引用数据类型,如果进行复制,会为新的变量在栈内存中分配一个新值,但是这个值仅仅是一个地址。也就是说,复制出来的变量和原有的变量具有相同的地址,指向堆内存中的同一个对象。

为什么基础数据类型存在栈中,而引用数据类型存在堆中呢?

1.堆比栈空间大,栈比堆运行速度快。
2.堆内存是无序存储,可以根据引用直接获取。
3.基础数据类型比较稳定,而且相对来说占用的内存小。
4.引用数据类型大小是动态的,而且是无限的。




以上是关于JavaScript两种数据类型的存储方式的主要内容,如果未能解决你的问题,请参考以下文章

JS中的两种数据类型以及实现引用类型的深拷贝

从变量看javaScript

JavaScript数据类型

前端面试之JavaScript(总结)

JavaScript:数据类型

Javascript与C#对变量的处理方式