当前位置: 首页 > 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. ……

相关文章:

  • 流程图是什么,用什么软件做?
  • [开源]Web端的P2P文件传输工具,简单安全高效的P2P文件传输服务
  • centos7 docker开启认证的远程端口2376配置
  • 分享11款原型图软件,让你的创意无限发挥!
  • [Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图
  • 三元表达式原理及例子js
  • OpenCV [c++](图像处理基础示例小程序汇总)
  • 使用new Vue()的时候发生了什么?
  • 案例015:Java+SSM+uniapp基于微信小程序的校园防疫系统
  • Hadoop学习笔记:运行wordcount对文件字符串进行统计案例
  • mac电脑系统活动监控:iStat Menus 中文 for Mac
  • 数据结构:顺序表
  • Java对象逃逸
  • 【学生成绩管理】数据库示例数据(MySQL代码)
  • 第十三章 : Spring Boot 日志记录脱敏
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • Docker 笔记(2):Dockerfile
  • Elasticsearch 参考指南(升级前重新索引)
  • es6(二):字符串的扩展
  • ES6语法详解(一)
  • IDEA 插件开发入门教程
  • Java面向对象及其三大特征
  • js 实现textarea输入字数提示
  • leetcode讲解--894. All Possible Full Binary Trees
  • mac修复ab及siege安装
  • MySQL的数据类型
  • Terraform入门 - 1. 安装Terraform
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 第2章 网络文档
  • 面试遇到的一些题
  • 区块链将重新定义世界
  • 原生Ajax
  • 终端用户监控:真实用户监控还是模拟监控?
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • #Linux(帮助手册)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十五)使用Nexus创建Maven私服
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)C#调用WebService 基础
  • (转载)利用webkit抓取动态网页和链接
  • *2 echo、printf、mkdir命令的应用
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET CF命令行调试器MDbg入门(一)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET(C#) Internals: as a developer, .net framework in my eyes