当前位置: 首页 > news >正文

HarmonyOS开发:ArkTs常见数据类型

前言

无论是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 //二进制 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. ……

相关文章:

HarmonyOS开发:ArkTs常见数据类型

前言 无论是Android还是iOS开发&#xff0c;都提供了多种数据类型用于常见的业务开发&#xff0c;但在ArkTs中&#xff0c;数据类型就大有不同&#xff0c;比如int&#xff0c;float&#xff0c;double&#xff0c;long统一就是number类型&#xff0c;当然了也不存在char类型&…...

Unsupervised MVS论文笔记

Unsupervised MVS论文笔记 摘要1 引言2 相关工作3 实现方法3.1 网络架构3.2 通过光度一致性学习3.3 MVS的鲁棒光度一致性3.4 学习设置和实施的细节3.5.预测每幅图像的深度图 4 实验4.1 在DTU上的结果4.2 消融实验 Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Chr…...

Matplotlib图形注释_Python数据分析与可视化

Matplotlib图形注释 添加注释文字、坐标变换 有的时候单单使用图形无法完整清晰的表达我们的信息&#xff0c;我们还需要进行文字进行注释&#xff0c;所以matplotlib提供了文字、箭头等注释可以突出图形中重点信息。 添加注释 为了使我们的可视化图形让人更加容易理解&#…...

如何把A3 pdf 文章打印成A4

1. 用Adobe Acrobat 打开pdf 2 打印 选择海报 进行调整即可如下图,见下面红色的部分。...

【Vue】vue指令

目录 V-html v-show和v-if v-show 显示 隐藏 v-if 显示 隐藏 总结 显示隐藏的应用场景 未登录的情况 登录的情况 v- else 和 v-else-if v-if 和v-else v-if 和 v-else-if 总结&#xff1a; v-on 语法一&#xff1a; 语法二&#xff1a; 调用传参 v-bind…...

记录华为云服务器(Linux 可视化 宝塔面板)-- 安全组篇

文章目录 前言安全组说明安全组的特性安全组的应用场景 进入安全组添加基本规则添加自定义规则如有启发&#xff0c;可点赞收藏哟~ 前言 和windows防火墙类似&#xff0c;安全组是一种虚拟防火墙&#xff0c;具备状态检测和数据包过滤功能&#xff0c;可以对进出云服务器的流量…...

基于Python 中创建 Sentinel-2 RGB 合成图像

一、前言 下面的python代码将带您了解如何从原始 Sentinel-2 图像创建 RGB 合成图像的过程。 免费注册后&#xff0c;可以从 Open Access Hub 下载原始图像。 请注意&#xff0c;激活您的帐户可能需要 24 小时&#xff01; 二、准备工作 &#xff08;1&#xff09;导入必要的库…...

保姆级连接FusionInsight MRS kerberos Hive

数新网络&#xff0c;让每个人享受数据的价值https://xie.infoq.cn/link?targethttps%3A%2F%2Fwww.datacyber.com%2F 概述 本文将介绍在华为云 FusionInsight MRS&#xff08;Managed Relational Service&#xff09;的Kerberos环境中&#xff0c;如何使用Java和DBeaver实现远…...

electerm 跨平台的终端 /ssh/sftp 客户端

文章目录 electerm功能特性主题配色 electerm 每个程序员基本都离开SSH链接工具,目前市场上好用的基本都是收费的 给大家推荐一款国人开发的开源链接工具https://github.com/electerm/electerm 到目前为止star已经9.5K了,非常受欢迎 功能特性 支持ssh,telnet,serialport,本地和…...

Anthropic LLM论文阅读笔记

研究时间&#xff1a;与Instrcut GPT同期的工作&#xff0c;虽然其比ChatGPT发布更晚&#xff0c;但是其实完成的时间比ChatGPT更早。与ChatGPT的应用区别&#xff1a;该模型比ChatGPT回答我不知道的概率更高。将强化学习用于大语言模型&#xff08;RLHF&#xff09;&#xff1…...

docker启动容器失败,然后查看日志,docker logs查看容器出现报错:

docker 启动容器失败&#xff0c;然后docker logs 查看容器出现报错&#xff1a; error from daemon in stream: Error grabbing logs: invalid character l after object key:value pair在网上看到的 解决方案&#xff1a; 找到你日志文件目录&#xff1a; docker inspect …...

【开源】基于Vue.js的网上药店系统

项目编号&#xff1a; S 062 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S062&#xff0c;文末获取源码。} 项目编号&#xff1a;S062&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药…...

App 设计工具

目录 说明 打开 App 设计工具 示例 创建 App 创建自定义 UI 组件 打开现有 App 文件 打包和共享 App 本文主要讲述以交互方式创建 App。 说明 App 设计工具是一个交互式开发环境&#xff0c;用于设计 App 布局并对其行为进行编程。 可以使用 App 设计工具&#xff1a…...

毅速:3D打印随形透气钢为解决模具困气提供了新助力

在模具行业中&#xff0c;困气是一个较常见的问题。解决困气问题的方法有很多&#xff0c;透气钢就是其一。传统的制造的透气钢往往存在一些不足&#xff0c;如加工难度大、无法满足复杂形状的需求等。随着3D打印技术的发展&#xff0c;一种新型的随形透气钢技术逐渐崭露头角&a…...

某软件商店app抓包分析与sign加密算法实现

文章目录 1. 写在前面2. 抓包配置3. 抓包分析4. 接口测试5. sign加密算法6. 数据效果展示 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】…...

万界星空科技QMS质量管理系统功能

QMS质量管理系统结合质量决策、综合质量管理、过程质量控制三个层次要素&#xff0c;帮助企业实现产品全寿命周期质量数据的及时、灵活、准确和全面采集。 通过质量管理软件能够实现质量数据科学处理和应用&#xff0c;包括数据的系统化组织、结构化存贮、便捷式查询、定制化统…...

杨传辉:从一体化架构,到一体化产品,为关键业务负载打造一体化数据库

在刚刚结束的年度发布会上&#xff0c;OceanBase正式推出一体化数据库的首个长期支持版本 4.2.1 LTS&#xff0c;这是面向 OLTP 核心场景的全功能里程碑版本&#xff0c;相比上一个 3.2.4 LTS 版本&#xff0c;新版本能力全面提升&#xff0c;适应场景更加丰富&#xff0c;有更…...

oracle “ORA-25153:临时表空间为空”

从生产上面备份出来了一个数据库&#xff0c;应用在使用时显示ORA-25153临时表空间为空的报错&#xff0c;原因一般是数据库迁移时&#xff0c;没有迁移完整造成的 解决方法 1.创建新的临时表空间temp2 create temporary tablespace temp2 tempfile DATA size 100M autoexten…...

游览器缓存讲解

浏览器缓存是指浏览器在本地存储已经请求过的资源的一种机制&#xff0c;以便在将来的请求中能够更快地获取这些资源&#xff0c;减少对服务器的请求&#xff0c;提高页面加载速度。浏览器缓存主要涉及到两个方面&#xff1a;缓存控制和缓存位置。 缓存控制 Expires 头&#…...

中国天然径流量格点数据集CNRD v1.0(1961-2018)

简介 中国天然径流量是指在中国境内自然形成的各种河流、湖泊、水库等水体中自然产生的流量。根据中国水利部的数据,中国天然径流量在年际变化和地区分布上都非常不均衡。北方地区径流量较小,南方地区则较大;而东部沿海地区的水资源较为丰富,而西北干旱地区的水资源则非常…...

Android12 展锐sl8541平台USB转串口驱动集成与SELinux权限实战解析

1. 硬件电路与引脚配置 在展锐sl8541平台上集成USB转串口功能&#xff0c;第一步需要确保硬件电路设计正确。Type-C接口的ID引脚连接到了CPU的KEYIN2/EXTINT4/GPIO126引脚&#xff0c;这个引脚的状态决定了USB的工作模式&#xff08;主机模式或设备模式&#xff09;。实际项目中…...

蓝桥杯单片机省赛避坑指南:用STC-ISP搞定74HC573数码管驱动,告别闪烁鬼影

蓝桥杯单片机竞赛实战&#xff1a;74HC573数码管驱动优化与调试技巧 在蓝桥杯单片机竞赛中&#xff0c;数码管显示模块的稳定性往往成为决定成败的关键细节。许多参赛选手在移植传统51单片机代码时&#xff0c;会遇到数码管闪烁、残影甚至完全无法显示的棘手问题。本文将深入分…...

告别Flash资源提取困境:3分钟学会用JPEXS Free Flash Decompiler完整教程

告别Flash资源提取困境&#xff1a;3分钟学会用JPEXS Free Flash Decompiler完整教程 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾经面对一个珍贵的SWF文件&#xff0c;想要…...

不止于安装:将PVE里的Win10打造成你的主力远程开发/测试环境(含性能调优与安全加固)

不止于安装&#xff1a;将PVE里的Win10打造成你的主力远程开发/测试环境&#xff08;含性能调优与安全加固&#xff09; 在虚拟化技术日益成熟的今天&#xff0c;Proxmox VE&#xff08;PVE&#xff09;作为开源的虚拟化平台&#xff0c;已经成为许多开发者和IT专业人士的首选。…...

RISC-V架构——物理内存保护(PMP)实战:从配置寄存器到安全区域设定

1. 初识RISC-V PMP&#xff1a;为什么需要物理内存保护&#xff1f; 第一次接触RISC-V的物理内存保护&#xff08;PMP&#xff09;功能时&#xff0c;我正为一个嵌入式项目调试内存越界问题。当时应用程序意外改写了关键配置区&#xff0c;导致系统崩溃。这种"手滑"操…...

多维度拆透渲染引擎 第三篇【维度:内部结构】渲染引擎之内 —— 核心模块全景拆解

第三篇【维度&#xff1a;内部结构】渲染引擎之内 —— 核心模块全景拆解读完此篇你将理解&#xff1a;渲染前端/后端的分野、七大核心模块各自的职责、灰色地带的归属判断逻辑、渲染引擎与外部子系统的接口设计原则。 本篇与第四篇、第八篇的关系&#xff1a;本篇回答"渲…...

百度网盘限速破解终极指南:使用baidu-wangpan-parse实现满速下载

百度网盘限速破解终极指南&#xff1a;使用baidu-wangpan-parse实现满速下载 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾为百度网盘那令人抓狂的下载速度而烦恼&a…...

避坑指南:向老外要质粒/数据,为什么总石沉大海?这5个细节你可能没注意

科研材料索要实战手册&#xff1a;5个被忽视的关键细节决定成败 在跨国科研合作中&#xff0c;向国际同行索取质粒或实验数据&#xff0c;往往像在迷宫中寻找出口——明明按照常规路径操作&#xff0c;却总在某个转角碰壁。许多研究者都有过这样的经历&#xff1a;精心撰写的邮…...

AD7606多路采集时序翻车实录:从‘8+3路异常’到‘下降沿触发’的保姆级避坑指南

AD7606多路采集时序翻车实录&#xff1a;从‘83路异常’到‘下降沿触发’的保姆级避坑指南 当你在深夜的实验室里盯着示波器上那些跳动的波形&#xff0c;突然发现采集到的数据出现莫名其妙的错乱——前8路信号正常&#xff0c;后3路却像被施了魔法一样完全不对。这种场景对于使…...

5分钟实战指南:如何让微信网页版在Chrome、Edge和Firefox中重新可用

5分钟实战指南&#xff1a;如何让微信网页版在Chrome、Edge和Firefox中重新可用 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版无法…...