HarmonyOS开发:ArkTs常见数据类型

news2024/9/23 13:28:44

前言

无论是Android还是iOS开发,都提供了多种数据类型用于常见的业务开发,但在ArkTs中,数据类型就大有不同,比如int,float,double,long统一就是number类型,当然了也不存在char类型,本文针对开发中常用的数据类型,做一个简单的概述,便于第一次接触到ArkTs语言开发的同学,能够快速的对数据类型做一个了解。

ArkTs是TypeScript的超集,其数据类型也是基于TypeScript而来,除了原始5种数据类型之外,还有一种对象类型,再结合ES6中的新类型Symbol和ES10中的新类型BigInt,以及包含常见的枚举、任意类型等等,大概有十多种,但常见常用的就那么几种。

数据类型汇总如下:

数据类型概述
number数值
boolean布尔
string字符串
undefined一个未定义或不存在的值
null
object对象
Symbol独一无二的值
bigint任意大的整数
enum枚举
any任意
unknown未知类型
void没有任何返回值的类型
never永远不存在的类型

在日常的开发中部分会高频次的出现,下面我们就一一的做下分析,由于篇幅有限,会分为两篇文章进行概述;如何判断当前数据是哪一种类型,可以使用typeof关键字来判断,当然了,也并不是所有的类型都可以判断出来。

本文的大纲如下:

1、数值类型number
2、布尔类型boolean
3、字符串类型string
4、对象object
5、未定义或不存在的值undefined
6、空null
7、相关总结

一、数值类型number

记住,凡是表示数值的,不管是二进制还是八进制,还是其他进制,疑惑是长整数,小数,负数等等,只有一个类型表示,那就是number。

局部声明须带关键字

    let a: number = 0 //整数
    let b: number = -100 //负数
    let c: number = 88.88 //小数
    let d: number = 0b1010 //二进制 ES6
    let e: number = 0o744 //八进制  ES6

成员声明不带关键字

  a: number = 0 //整数
  b: number = -100 //负数
  c: number = 88.88 //小数
  d: number = 0b1010 //二进制
  e: number = 0o744 //八进制

需要注意的是TypeScript中有类型推断功能,类型可以不写也不会报错,为了避免冗余,日后的书写也建议舍弃类型,标准如下:

局部声明

    let a = 0 //整数
    let b = -100 //负数
    let c = 88.88 //小数
    let d = 0b1010 //二进制
    let e = 0o744 //八进制

成员声明

  a = 0 //整数
  b = -100 //负数
  c = 88.88 //小数
  d = 0b1010 //二进制
  e = 0o744 //八进制

当然了以上的前提必须拥有默认值,如果不定义默认值,其类型可携带可不携带,但是为了确定类型,方便之后的代码调用,建议还是带上类型比较好,如下:

局部声明

    let a:number 
    let b:number
    let c:number
    let d:number
    let e:number

成员声明

  a: number
  b: number
  c: number
  d: number
  e: number

如果没有声明类型,也不会报错,那么它是一个不确定类型any,后续可以赋值任何类型数据。

二、布尔类型boolean

布尔类型没什么好说的,用于标识true和false。

局部声明

//带默认值

let isBoolean: boolean = false

//类型推断后省略类型写法

let isBoolean = false

//不带默认值

let isBoolean: boolean

成员声明

//带默认值

isBoolean: boolean = false

//类型推断后省略类型写法

isBoolean = false

//不带默认值

isBoolean: boolean

其他使用方式跟number类型基本一致。

三、字符串类型string

字符串使用,可单引号也可双引号,都是表示一个字符串。

局部声明

//带默认值

let singleQuotes: string = '单引号字符串'

let doubleQuotes: string = "双引号字符串"

//类型推断后省略类型写法

let singleQuotes = '单引号字符串'

let doubleQuotes = "双引号字符串"

//不带默认值

let singleQuotes: string

let doubleQuotes: string

成员声明

//带默认值

singleQuotes: string = '单引号字符串'

doubleQuotes: string = "双引号字符串"

//类型推断后省略类型写法

singleQuotes = '单引号字符串'

doubleQuotes = "双引号字符串"

//不带默认值

singleQuotes: string

doubleQuotes: string

其他使用方式跟number类型基本一致。

四、对象object

在ArkTs中,不管你是一个普通的对象,还是一个数组,元组,集合等等,都是一个对象类型。

    let obj = { "name": "AbnerMing" }

    let test: Test = new Test()

    let numberArray = [1, 2, 3, 4, 5]

    let numberArrayObj = new Array<number>()

    let tuple: [string, number] = ["age", 10]

    let list = new ArrayList<number>()

    let map = new HashMap<string, number>()

    console.log("当前数据类型1:" + typeof obj)
    console.log("当前数据类型2:" + typeof test)
    console.log("当前数据类型3:" + typeof numberArray)
    console.log("当前数据类型4:" + typeof numberArrayObj)
    console.log("当前数据类型5:" + typeof tuple)
    console.log("当前数据类型6:" + typeof list)
    console.log("当前数据类型7:" + typeof map)

日志打印如下:

1、普通对象

和其他语言的声明及使用方式基本一致,可以对其变量私有,通过get/set方法进行获取,也有私有和公共关键字。

export class Test {
  private name: string
  private age: number

  getName() {
    return this.name
  }

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

  getAge() {
    return this.age
  }

  setAage(age: number) {
    this.age = age
  }
}

使用方式:

    let test = new Test()
    test.setName("AbnerMing")
    test.setAage(10)

    let name = test.getName()
    let age = test.getAge()

如果没有特别的要求,也可以不用get和set方法:

export class Test {
  name: string
  age: number
}

使用方式:

    let test = new Test()
    test.name = "AbnerMing"
    test.age = 10

    let name = test.name
    let age = test.age

除了以上的对象创建和使用之外,在ArkTs中也支持直接花括号的形式声明:

    let test = { "name": "AbnerMing", "age": 10 }

    let name = test.name
    let age = test.age

2、数组

数组有两种声明方式,一种是使用Array对象,一种直接使用中括号[]。

let array = Array<number>()

let arr = []
默认值
    let arr = [1, 2, 3, 4, 5]

    let array = Array<number>(1, 2, 3, 4, 5)

数组如果没声明类型,它是可以并存多种类型数据的,如下所示:

    let arr = [1, "字符串", true, new Test()]

    let array = Array<any>(1, "字符串", true, new Test())

所以在以后的开发中,对于数组而言,大家尽量精确数据类型,方便后续的使用,针对数组的操作,比如增删改查,后续的文章会有讲解,大家可以持续关注。

3、元组

如果存储的元素数据类型不同,则需要使用元组,元组中允许存储不同类型的元素,元组可以作为参数传递给函数。

    let tuple = ["AbnerMing", 10]
    console.log("key:" + tuple[0])
    console.log("value:" + tuple[1])

日志打印:

4、集合

无论是单列集合list,还是双列集合map,都吸取了Java中的优点,基本关于集合操作的方法,在ArkTs中该有的都有,本篇就不过多的介绍了。

五、未定义或不存在的值undefined

当你定义了一个变量而为赋值时,那么它就是undefined。

比如我定义了一个变量,而为进行赋值,如下:

    let test

    console.log(typeof test)

控制台打印如下:

那么在以后的开发中,如果你不确定某个数据是否有值,无论对象还是其他类型,都可以进行undefined判断:

let test

if (test != undefined) {
   console.log("有值")
} else {
   console.log("无值")
}

六、空null

null是一个表示"空值"的对象,通常用来表示变量的值为“没有值”,如果需要明确表示一个变量的值为空,就可以使用 null。

let test=null

console.log(test)

上述的打印结果为null,和undefined不同的是,需要设置为null,如果不设置就是undefined,需要注意的是,null 和 undefined 在进行比较时,它们的值相等,但数据类型不同。

如下比较:

console.log(null === undefined); // false

console.log(null == undefined); // true

除了变量的默认值赋值为null之外, 还可以用来作为函数的返回值,当函数没有需要返回的值时,可以使用 return null,表示函数的返回值为空。

null和undefined进行比较

1、null 表示对象为空,而 undefined 表示缺少值。

2、声明变量但未赋值时,变量的值为 undefined,当需要表示空值时,可以使用 null。

3、在比较时,null 和 undefined 的值相等,但数据类型不同。

九、相关总结

ArkTs是TypeScript的超集,针对数据类型,说强它则强,说不强也不强,比如,一个变量,如未指定数据类型,它可以进行任何类型赋值,以最后一个赋值为最终结果。

    let test// any

    test = 0
    test = "字符串"
    test = true

    console.log(test)

上述则会打印true,所有在以后的开发中,大家尽量要对数据进行类型限制,既方便与类型区分,也方便错误的甄别,更加有利于代码的健壮。

关于数据类型中的元组、数组、集合,本篇文章只是作为一个简单的了解。

为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (Harmony OS)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. 应用开发导读(Java)

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1248874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新式的拉式膜片弹簧离合器设计机械设计CAD

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;离合器 获取完整论文报告工程源文件 减震弹簧 摩擦片 膜片弹簧 压盘 轴 扭转减震器 从动盘 离合器 离合器的结构设计 为了达到计划书所给的数据要求&#xff0c;设计时应根据车型的类别、使用要求、制造条件&#xff0c;…

Flink-简介与基础

Flink-简介与基础 一、Flink起源二、Flink数据处理模式1.批处理2.流处理3.Flink流批一体处理 三、Flink架构1.Flink集群2.Flink Program3.JobManager4.TaskManager 四、Flink应用程序五、Flink高级特性1.时间流&#xff08;Time&#xff09;和窗口&#xff08;Window&#xff0…

FreeRTOS深入教程(信号量源码分析)

文章目录 前言一.创建信号量二.释放信号量三.获取信号量成功获取获取不成功 总结 前言 本篇文章将为大家讲解信号量&#xff0c;源码分析。 在 FreeRTOS 中&#xff0c;信号量的实现基于队列。这种设计的思想是利用队列的特性来实现信号量&#xff0c;因为信号量可以被视为只…

借助 XEOS V6, 农牧龙头企业实现原有存储的高效在线替换

面对旧有存储系统的应用不足&#xff0c;某大型现代农牧龙头企业采用了星辰天合的对象存储 XEOS V6 方案&#xff0c; 该方案以其卓越的技术架构和同城双活异地灾备的解决方案完整性&#xff0c;在无缝高效完成系统替换的同时&#xff0c;可以极大地提升系统的灵活性和业务的连…

C/C++ 实现Socket交互式服务端

在 Windows 操作系统中&#xff0c;原生提供了强大的网络编程支持&#xff0c;允许开发者使用 Socket API 进行网络通信&#xff0c;通过 Socket API&#xff0c;开发者可以创建、连接、发送和接收数据&#xff0c;实现网络通信。本文将深入探讨如何通过调用原生网络 API 实现同…

RabbitMQ之发送者(生产者)可靠性

文章目录 前言一、生产者重试机制二、生产者确认机制实现生产者确认&#xff08;1&#xff09;定义ReturnCallback&#xff08;2&#xff09;定义ConfirmCallback 总结 前言 生产者重试机制、生产者确认机制。 一、生产者重试机制 问题&#xff1a;生产者发送消息时&#xff0…

【python VS vba】(6) python的常用函数print()的各种用法和细节(未完成)

1 基本语法 print() 3.0 都是函数用法 2 可打印的各种对象 直接打印对象 直接打印数组 直接打印string 数值等 3 打印的各种内容如何连接 逗号分隔 &不行 3 转义符 可用转义符 换行的特殊符号 /n 4 print() 里带变量怎么输出 试验了4种输出带变量的方法&#xf…

无需外接显示器,直接使用windows安装树莓派系统并可远程桌面登录

准备工作: 1.安装树莓派官方烧录工具 raspberry pi imager 2.下载树莓派系统镜像(也可选择在线下载安装) 打开imager工具&#xff0c;选择需要安装包树莓派版本 点击"NEXT"&#xff0c;在弹出的选项中选择编辑设置。 设置登录名和密码&#xff0c;已经所连接的wif…

如何有效减少 AI 模型的数据中心能源消耗?

在让人工智能变得更好的竞赛中&#xff0c;麻省理工学院&#xff08;MIT&#xff09;林肯实验室正在开发降低功耗、高效训练和透明能源使用的方法。 在 Google 上搜索航班时&#xff0c;您可能已经注意到&#xff0c;现在每个航班的碳排放量估算值都显示在其成本旁边。这是一种…

在Linux服务器部署爬虫程序?大佬只需七步!

之前在某乎上看见一篇关于《为什么很多程序员都建议使用 Linux》的文章&#xff0c;结合我自身关于Linux的使用经验。心血来潮得写了一段关于我在Linux系统部署爬虫程序的心得&#xff0c;希望结识更多的爬虫技术大佬&#xff0c;一起游弋在代码世界中。 根据我多年在Linux上部…

机器学习-激活函数的直观理解

机器学习-激活函数的直观理解 在机器学习中&#xff0c;激活函数&#xff08;Activation Function&#xff09;是用于引入非线性特性的一种函数&#xff0c;它在神经网络的每个神经元上被应用。 如果不使用任何的激活函数&#xff0c;那么神经元的响应就是wxb&#xff0c;相当…

数据结构-树-二叉树-堆的实现

1.树概念及结构 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个特殊的结点&#xff…

5.1 Windows驱动开发:判断驱动加载状态

在驱动开发中我们有时需要得到驱动自身是否被加载成功的状态&#xff0c;这个功能看似没啥用实际上在某些特殊场景中还是需要的&#xff0c;如下代码实现了判断当前驱动是否加载成功&#xff0c;如果加载成功, 则输出该驱动的详细路径信息。 该功能实现的核心函数是NtQuerySys…

【matlab版本的ggplot2】

gramm (complete data visualization toolbox, ggplot2/R-like) 来源&#xff1a;Morel, Pierre. “Gramm: Grammar of Graphics Plotting in Matlab.” The Journal of Open Source Software, vol. 3, no. 23, The Open Journal, Mar. 2018, p. 568, doi:10.21105/joss.00568…

五种多目标优化算法(NSDBO、NSGA3、MOGWO、NSWOA、MOPSO)求解微电网多目标优化调度(MATLAB代码)

一、多目标优化算法简介 &#xff08;1&#xff09;非支配排序的蜣螂优化算法NSDBO 多目标应用&#xff1a;基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度&#xff08;MATLAB&#xff09;-CSDN博客 &#xff08;2&#xff09;NSGA3 NSGA-III求解微电网多目标…

医院预约管理系统开发 代码展示 九价疫苗接种预约功能(含小程序源代码)

基于微信小程序的疫苗预约系统让疫苗信息&#xff0c;疫苗预约信息等相关信息集中在后台让管理员管理&#xff0c;让用户在小程序端预约疫苗&#xff0c;查看疫苗预约信息&#xff0c;该系统让信息管理变得高效&#xff0c;也让用户预约疫苗&#xff0c;查看疫苗预约等信息变得…

力扣刷题篇之排序算法

系列文章目录 前言 本系列是个人力扣刷题汇总&#xff0c;本文是排序算法。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff09; 这个之前写的左神的课程笔记里也有&#xff1a; 左程云算法与数据结构代码汇总之排序&am…

网络安全工程师就业前景怎么样?

网络安全工程师的就业前景整体来看是不错的&#xff0c;近些年的岗位需求总体呈现上升的趋势&#xff0c;可以说只要有互联网的存在&#xff0c;就会有网络安全工程师的一席之地。不过现在企业更缺乏资深技术人才&#xff0c;如果只学会了皮毛&#xff0c;可能不会很好就业。 网…

推荐几款优秀的Chrome插件,值得收藏!

文章目录 1、Tampermonkey2、WeTab3、Chrono下载管理器4、AdBlock5、Cookie-Editor 1、Tampermonkey 使用用户脚本自由地改变网络&#xff0c;提升您的浏览体验&#xff0c;使用篡改猴&#xff01;&#x1f310;&#x1f680; 篡改猴是一款功能强大的浏览器扩展功能&#xff0c…

python与C++与TensorRT的绑定

绑定的起因 Jetpack中的TensorRT不能直接在python3.8环境中使用,所以我们需要对TensorRT利用pybind11对python相进性绑定。 绑定的官方链接如下:点击这里 这个是8.2版本的,你可以使用其他版本也是可以的。 整个过程可以在虚拟环境中完成,主要是想最后的whl文件 在Jetson…