鸿蒙进阶篇-剩余和展开、简单和复杂类型

"在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。"

各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今天的学习,鸿蒙进阶篇-剩余和展开、简单和复杂类型

在鸿蒙中:

"剩余" 参数允许函数接收数量不定的额外参数,并将它们以数组的形式进行处理,增强了函数在参数处理上的灵活性。

"展开" 常用于数组或对象操作中,例如将数组元素展开为独立的参数传递给函数,或者将对象的属性展开为独立的键值对。

"简单类型" 通常指基本的数据类型,如整数、浮点数、布尔值、字符和字符串等。它们具有固定的大小和简单的操作,在内存中的表示相对直接。

"复杂类型" 则包括数组、对象、类等。这些类型由多个简单类型或其他复杂类型组合而成,具有更丰富的结构和操作方式,需要更多的内存和处理逻辑来管理和操作。

总的来说,"剩余" 和 "展开" 是在编程中处理参数和数据结构的方式,而 "简单类型" 和 "复杂类型" 则是对数据类型的分类,反映了数据的结构和复杂度。

剩余和展开

接下来学习一个运算符 ...
...在不同的情况下有不同的效果,分别是 剩余参数 和 展开

剩余参数

通过剩余参数的语法,我们可以将 函数 或 方法 中一个不定数量的参数表示为一个数组
附上官方文档链接https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/rest_parameters

// 剩余参数 【只能写在最后一位】
function 函数名(参数1,参数2,...剩余参数数组){
  // 逻辑代码
  // 剩余参数之前的参数 挨个获取即可
  // 剩余参数:以数组的形式获取
}

展开

出于程序稳定性,以及运行性能考虑,在 ArkTS 中 ...(展开运算符) 只能用在数组上
附上官方文档链接https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/quick-start/typescript-to-arkts-migration-guide.md#%E9%83%A8%E5%88%86%E6%94%AF%E6%8C%81%E5%B1%95%E5%BC%80%E8%BF%90%E7%AE%97%E7%AC%A6

下面展示一个案例来理解:

const numArr1: number[] = [1, 2, 3, 4]
const numArr2: number[] = [5, 6, 7]

// 合并到一起
const totalArr: number[] = [...numArr1, ...numArr2]

// 添加
const numArr3: number[] = [8, 9, 10]
const numArr4: number[] = [11, 12, 13]

// 将 numArr4 展开,传递给push
numArr3.push(...numArr4)
console.log('', totalArr)

@Entry
@Component
struct Example01 {
  build() {
    Column() {
      Column() {
        Column() {
        }
        .margin(10)

      }.width(250)
      .height(500)
      .backgroundColor('#eee')
      .border({ width: 2, color: 'green', style: BorderStyle.Solid })

    }.width('100%')
  }
}

简单类型和复杂类型

ArkTS中的数据类型整体可以分为 两大类:

1 基本数据类型(简单数据类型)

number 数字型、string 字符串型、boolean布尔型、undefined未定义、null空类型

2 引用数据类型(复杂数据类型)

Object、Function、Array

这两类数据在内存中保存的方式略有不同,导致在日常开发中对这两类数据进行赋值操作时会有不同的结果

下面展示一个案例来理解:

比如如下代码:
1
num1和 num2 的值分别是?
2
p1.name和p2.name 分别是?

// 基本数据类型
let numA: number = 10
let numB: number = numA
numB++
console.log('numA:', numA) // ?
console.log('numB:', numB) // ?


// 引用数据类型
class Person {
  name: string = ''

  constructor(name: string) {
    this.name = name
  }
}

const p1: Person = new Person('jack')
const p2: Person = p1
// 修改 P2 是否会报错
p2.name = 'rose'

console.log('p1.name:', p1.name) // ?
console.log('p2.name:', p2.name) // ?

@Entry
@Component
struct Example01 {
  build() {
    Column() {
      Column() {
        Column() {
        }
        .margin(10)

      }.width(250)
      .height(500)
      .backgroundColor('#eee')
      .border({ width: 2, color: 'green', style: BorderStyle.Solid })

    }.width('100%')
  }
}

为了弄明白上述现象的原因,就需要搞清楚这两种数据类型在内存存储的差异是什么

内存中堆栈空间

咱们可以把内存理解为有 2 类空间:

1栈:访问速度快,基本数据类型存放到栈里面

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

基本数据类型和复杂数据类型是如何保存的呢?

基本数据类型存储

变量的数据直接存放在栈空间中,访问速度快

引用数据类型存储

1 栈空间:存放 变量的内存地址(堆中的地址)

2 堆空间:存放 变量的 值

站在内存角度看变量赋值

基本数据类型

num1 num2 都保存在堆内存中,虽然值相同,但是各自是独立的空间,后续操作 互不影响

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

引用数据类型

p1 和 p2 栈内存中有各自独立的空间,但是保存的是堆内存的地址,指向的是同一个数据:

修改 p2.namep1.name 也会受到影响,因为是同一份数据

class Person {
  name: string = ''

  constructor(name: string) {
    this.name = name
  }
}

const p1: Person = new Person('jack')
const p2: Person = p1
p2.name = 'rose'

以上是关于鸿蒙进阶篇-剩余和展开、简单和复杂类型、类综合的一些内容,方便大家学习,至此,关于鸿蒙进阶篇 - 剩余和展开、简单和复杂类型综合的内容就介绍到这里,愿您能学以致用,开发出精彩的鸿蒙应用!

以上内容仅供学习交流,如有违法或者侵权可以联系删除。

相关推荐
lqj_本人10 分钟前
鸿蒙next版开发:订阅应用事件(ArkTS)
华为·harmonyos
zhongcx011 小时前
鸿蒙NEXT开发案例:转盘
华为·harmonyos·鸿蒙·鸿蒙next
小白的孤独历险记12 小时前
华为eNSP:AAA认证(pap和chap)telnet/ssh
华为·智能路由器
鸿蒙自习室17 小时前
鸿蒙UI开发——小图标的使用
ui·华为·harmonyos
我爱学习_zwj17 小时前
ArkTS的进阶语法-3(内置对象,String字符串对象,数组的常用方法)
前端·华为·harmonyos
lqj_本人20 小时前
鸿蒙next版开发:ArkTS组件自定义事件拦截详解
华为·harmonyos
@逆风微笑代码狗21 小时前
133.鸿蒙基础01
华为·harmonyos
我爱学习_zwj1 天前
ArkTS的进阶语法-1(泛型,工具类型,空安全)
前端·javascript·华为·harmonyos
雪芽蓝域zzs1 天前
HarmonyOS 沉浸式状态实现的多种方式
华为·harmonyos
lqj_本人1 天前
Flutter&鸿蒙next 使用 BLoC 模式进行状态管理详解
flutter·华为·harmonyos