鸿蒙--简单类型和复杂类型--详解

369 阅读2分钟

简单类型和复杂类型

ArkTS中数据类型整体可以分为两大类,基本数据类型(简单数据类型),和引用数据类型(复杂数据类型),他们在内存中保存方式略有不同,以至于在日常开发中对这两种不同的数据类型进行赋值操作时会有不同的结果

分类

  1. 基本数据类型

    number:数字类型

    string:字符串类型

    boolean:布尔类型

    undefined:未定义

    null:空类型

  2. 复杂数据类型

    Object:对象类型

    Function:函数类型

    Array:数组类型

存储方式

在介绍存储方式之前,先介绍一下内存中的两类空间

  1. :访问速度快,基本类型存储到栈里面

  2. :存储容量大,引用类型存储到堆里面

    图示:

image-20240821193531519

1. 基本数据类型存储

变量的数据直接存放在栈空间中

2. 应用数据类型存储

变量的内存地址(在堆中的地址)存储在栈中,具体的值存储在堆中

​ 图示:

image-20240821195236811

变量赋值在内存中的存储方式

图示:

image-20240821210107985

1.基本数据类型

let num1: number = 10
let num2: number = num1

num1和num2都保存在栈中,但是各自存储在独立的空间,一个改变,另一个不会跟着变化

示例:

image-20240821202106472

2.引用数据类型

let num3:number[]=[1,2,3,4]
let num4:number[]=num3

num3和num4为数字数组(引用数据类型),内存栈中有着各自独立的空间,但是保存的是堆内存的地址,指向同一数据,并且修改任意一个数据另一个都会跟着发生变化

示例:

image-20240821204349753

但是,如果不是在原数组基础上修改,而是直接拿另一个数组替换掉原数组d,此时c不会跟着变化

示例

image-20240821204306165

这是因为[5,6,7,8]是一个新的数组,在语句执行的时候,在内存另一个地方新创建了一块独立的空间存储,然后把堆地址复制给了d,但c仍然是原数组的地址,所以这时c和d在栈中存储的地址并不相同,

补充:一个小知识点,typeof可以查看数据的类型,返回一个字符串

使用:typeof + 数据

console.log('a', typeof a)

图示:

image-20240821205530189