JS数据在内存中的存储方式
概要:Js数据类型在内存中的存储形式......
Js数据类型:
- 简单数据类型(基本数据类型):Number、String、Boolean、Undefined、Null
- 复杂数据类型(引用数据类型):Object、Array、Function
数据结构:
- 常用的数据结构:数组、栈、堆、列表、链表、图、树
- Js上述两种数据类型使用两种数据结构:栈(先进后出)、堆(特殊的树形结构)
数据存储方式:
1、简单数据类型:
简单数据类型保存在栈中,这些类型在内存中别占有固定大小,他们的值保存在栈空间,按值访问。变量在声明过程中,会在栈中开辟一段内存空间,变量值直接存在该内存中,变量读写的是它们实际保存的值。
简单数据数据复制时,会为新声明的变量直接开辟一段新空间, 然后把值复制到为新变量分配的空间中
简单数据类在当前执行环境结束时销毁。
2、复杂数据类型:
复杂数据类型是不固定大小的数据,但是存放他们的地址大小是固定的,所以把地址保存在栈中,值保存在堆中。复杂数据类型是一个指针,指针保存在栈中,但是指针指向的是堆。即存储复杂数据类型的变量保存在栈中,数据本身保存在堆中。读取其数据时,先访问栈中的地址,通过地址找到存在堆中的数据。
复杂数据类型在进行拷贝的时候,分为深拷贝和浅拷贝:
浅拷贝:复制的是引用地址,所以拷贝的变量存储的引用地址和原来的指向堆中同一个地址。
深拷贝:栈中开辟一段新的空间存储复制的变量,堆中开辟一个新的空间存储复制的内容,栈中变量存储的引用地址指向堆中复制的一个新的地址。
拓展:
Java基本数据类型:
- 字符类型:
- char:16位,存储Unicode码,用单引号赋值。
- 布尔类型:
- boolean:只有true和false两个值。
- 数值类型:
- byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
- short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
- int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
- long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
- float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
- double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。