HarmonyOS开发:ArkTs常见数据类型

前言

无论是Android还是iOS开发,都提供了多种数据类型用于常见的业务开发,但在ArkTs中,数据类型就大有不同,比如int,float,double,long统一就是number类型,当然了也不存在char类型,本文针对开发中常用的数据类型,做一个简单的概述,便于第一次接触到ArkTs语言开发的同学,能够快速的对数据类型做一个了解。ArkTs是TypeScript的超集,其数据类型也是基于TypeScript而来,除了原始5种数据类型之外,还有一种对象类型,再结合ES6中的新类型Symbol和ES10中的新类型BigInt,以及包含常见的枚举、任意类型等等,大概有十多种,但常见常用的就那么几种。数据类型汇总如下:

在日常的开发中部分会高频次的出现,下面我们就一一的做下分析,由于篇幅有限,会分为两篇文章进行概述;如何判断当前数据是哪一种类型,可以使用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 //二进制 ES6let 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:numberlet c:numberlet d:numberlet e:number

成员声明

  a: numberb: numberc: numberd: numbere: 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: stringlet doubleQuotes: string

成员声明

//带默认值singleQuotes: string = '单引号字符串'doubleQuotes: string = "双引号字符串"//类型推断后省略类型写法singleQuotes = '单引号字符串'doubleQuotes = "双引号字符串"//不带默认值singleQuotes: stringdoubleQuotes: 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: stringprivate age: numbergetName() {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: stringage: number
}

使用方式:

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

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

    let test = { "name": "AbnerMing", "age": 10 }let name = test.namelet 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 testconsole.log(typeof test)

控制台打印如下:

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

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

六、空null

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

let test=nullconsole.log(test)

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

如下比较:

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

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

null和undefined进行比较

1、null 表示对象为空,而 undefined 表示缺少值。
2、声明变量但未赋值时,变量的值为 undefined,当需要表示空值时,可以使用 null。
3、在比较时,null 和 undefined 的值相等,但数据类型不同。

七、相关总结

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

    let test// anytest = 0test = "字符串"test = trueconsole.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.mzph.cn/news/184901.shtml

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

相关文章

【超全】C++速查手册:面向对象与继承多态

C速查手册 C 类和对象 面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠…

MySQL递归查询:洞悉数据的层层关联

在处理关系型数据库时&#xff0c;我们经常会遇到这样的情况&#xff1a;某些数据之间存在层级关系&#xff0c;例如目录、组织结构、评论等。在这些场景下&#xff0c;我们需要一种灵活的查询技术来处理这种层级关系。今天我们就来探讨MySQL中的递归查询&#xff0c;体验其独特…

yolov3学习总结

目标检测算法 单阶段&#xff1a;不提取出候选框&#xff0c;直接将整个图像输入模型中&#xff0c;算法直接输出检测结果&#xff0c;端到端 yolo&#xff0c;ssd 端到端&#xff0c;输入图像到网络中&#xff0c;然后从网络中输出图像 二阶段&#xff1a;先从图像中提取出…

紫光展锐Wi-Fi 6成功通过Wi-Fi联盟认证

近日&#xff0c;紫光展锐Wi-Fi 6产品成功通过Wi-Fi联盟 (简称“WFA”) Qualified Solution 认证&#xff0c;并支持Wi-Fi 6 Release 2&#xff0c;标志着紫光展锐自研Wi-Fi 6 IP技术已经成熟&#xff0c;在互操作性、安全性和一系列应用专有协议方面达到了国际行业标准。 WFA是…

自定义 element DatePicker组件指令 使选择器呈现为只读状态,用户无法直接编辑,但可以查看和选择日期

1.问题 现实中遇到列表的搜索条件使用DatePicker 组件进行开始结束时间筛选&#xff0c;但是手动修改input中的值&#xff0c;导致请求参数异常。比如讲clearable设置为false之后还是能手动清空输入框中的值。虽然组件提供了readonly 属性&#xff0c;但是也会让日期选择也无法…

【Flink进阶】-- Flink kubernetes operator 快速入门与实战

1、课程目录 2、课程链接 https://edu.csdn.net/course/detail/38831

4天肝出一个数据应用,可能吗?| StartDT Hackathon

以「基于SimbaOS Kernel的应用创新」为主题&#xff0c;2023年秋季StartDT Hackathon近日圆满收官。 本季黑客马拉松不仅有多次蝉联冠军的算法团队参战&#xff0c;有过去惜败的队伍卷土重来&#xff0c;还吸引到了制造、政企、泛零售等行业线开发者“攻擂”&#xff0c;携丰富…

uniapp + electron 打包项目

参考文献 1、控制台安装electron和electron打包工具electron-packager npm install electron -g npm install electron-packager -g2、manifest.json修改 运行的基础路径修改为&#xff1a;./ 不然打包出来会出现白屏&#xff0c;读取不到&#xff0c;因为打包出来的h5默认加…

【JavaEE】线程安全与线程状态

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

配电房综合监控系统

配电房综合监控系统是一种集成了实时监控、数据采集、远程控制等多功能的系统&#xff0c;用于对配电房进行全方位的监测和管理。 力安科技配电室综合监控系统依托电易云-智慧电力物联网&#xff0c;实现配电室环境监测、有害气体监测、安防监控、采暖通风、门禁、灯光、风机、…

进阶C语言-字符函数和字符串函数

字符函数和字符串函数 &#x1f388;1.函数介绍&#x1f50e;1.1strlen函数&#x1f52d;1.1.1strlen函数的模拟实现&#x1f4d6;1.计数器法&#x1f4d6;2.递归法&#x1f4d6;3.指针-指针 &#x1f50e;1.2strcpy函数&#x1f52d;1.2.1strcpy函数的模拟实现 &#x1f50e;1…

Linux系统编程 day07 信号

Linux系统编程 day07 信号 1. 信号的介绍以及信号的机制2. 信号相关函数2.1 signal2.2 kill2.3 abort和raise2.4 alarm2.5 setitimer 3. 信号集4. 信号捕捉函数6. SIGCHLD信号7. SIGUSR1与SIGUSR2 1. 信号的介绍以及信号的机制 信号是信息的载体&#xff0c;在Linux/Unix环境下…

如何有效的进行 E2E

一、前言 本文作者介绍了什么是E2E测试以及E2E测试测什么&#xff0c;并从对于被测系统、测试用例、测试自动化工具、测试者四个方面的要求&#xff0c;介绍了如何保证E2E测试有效性&#xff0c;干货满满&#xff0c;值得学习。 二、什么是E2E测试 相信每一个对自动化测试感…

需求不明确的情况下,测试该如何处理?

当需求不明确的情况下&#xff0c;测试团队可以采取以下措施来处理&#xff1a; 1. 与项目团队进行沟通&#xff1a;测试团队应与项目团队密切合作&#xff0c;与业务分析师、产品经理等相关人员进行沟通&#xff0c;以获取更多的需求细节和背景信息。通过与相关方的交流&…

zookeeper 客户端常用命令简单记录(实操课程系列--watcher功能测试)(发布订阅功能测试)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper。阅读本文之前&#xff0c;请先阅读----zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09; 1、命令行工具切换到zookeeper的bin目录下面&am…

springboot自定义校验注解的实现

自定义校验注解的实现 通过谷粒商城项目学习了自定义校验器的实现一、编写自定义校验注解二、自定义注解的校验器三、关联自定义的校验器和自定义的校验注解总结 通过谷粒商城项目学习了自定义校验器的实现 近日在学习雷神的谷粒商城项目&#xff0c;其中有一个自定义校验的实…

国外客户跟我要佣金,该给不该给?

“Jack&#xff0c;这次你要是不帮我&#xff0c;我就死定了&#xff01;” 收到美国公司采购Antony的信息时&#xff0c;我有些哭笑不得&#xff0c;因为在我电脑屏幕上除了他的信息外&#xff0c;还有来自他公司监察部门的邮件&#xff1a; “jack先生&#xff0c;我们调查…

二极管钳位电路的作用

1、使用钳位二极管的瞬态保护即将输出电压限定在某个区间 钳位二极管不仅仅是为了改变电压基线。它们在缓解瞬态事件方面非常有用&#xff0c;尤其是ESD和雷电浪涌。例如&#xff0c;当输入电压高于 Vh 时&#xff0c;D1 正向偏置。因此&#xff0c;过多的电流流过 D1 而不是负…

Linux Centos系统安装Mysql8.0详解

本文是基于服务器Linux Centos 8.0系统 安装 Mysql8.0真实运维工作实战为例&#xff0c;详细讲解安装的全过程。 1&#xff0c;检查卸载mariadb Mariadb数据库是mysql的分支&#xff0c;mariadb和mysql会有冲突&#xff0c;所以安装Mysql前&#xff0c;首先要检查是否安装了m…

java学习part23异常try catch

124-异常处理-异常的概述与常见异常的举例_哔哩哔哩_bilibili 1.异常 2.try catch 3.finally 类似golang的defer 一定执行的语句