JS数据类型及存储方式

371 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

JS数据类型及存储方式 JavaScript的数据类型分为:原始类型(基本数据类型)和对象类型(引用数据类型) 基本数据类型:null(空),undefined(未定义),number(数字),String(字符串),Boolean(布尔值),Symbol(符号)

注:

  • Symbol(ES6新增数据类型)
  • bigInt(ES6新增数据类型) 引用数据类型:引用数据类型统称为Object类型(只要能new出来,就是引用数据类型)

Object(对象),Array(数组),Function(函数),Date(时间)

基本数据类型 存储在 栈 中; 引用数据类型 存储在 堆 中。

基本数据类型(存放在栈中)

     基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问。

 

引用数据类型(存放在堆内存中的对象,每个空间大小不一样,要根据情况进行特定的配置)

    引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。

引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存在堆内存中的对象。

栈内存是自动分配内存的。而堆内存是动态分配内存的,不会自动释放。所以每次使用完对象的时候都要把它设置为null,从而减少无用内存的消耗

复制变量时的不同

 1)原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。

2)引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,

也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。

(这里要理解的一点就是,复制对象时并不会在堆内存中新生成一个一模一样的对象,只是多了一个保存指向这个对象指针的变量罢了)。多了一个指针

注意: 1.每个对象在堆中有一个引用地址; 2.引用类型在栈中会保存其引用地址,以便快速查找到堆内存中的对象。