HarmonyOS开发:ArkTs常见数据类型(一)

news2024/11/15 18:25:33

前言

无论是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,所有在以后的开发中,大家尽量要对数据进行类型限制,既方便与类型区分,也方便错误的甄别,更加有利于代码的健壮。

关于数据类型中的元组、数组、集合,本篇文章只是作为一个简单的了解,而关于类型操作,比如获取,删除等等,我们在接下来的文章中再做概述,希望大家可以持续关注。

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

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

相关文章

系列九、JUC强大的辅助类

一、CountDownLatch 1.1、概述 让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒 1.2、功能 CountDownLatch主要有两个方法&#xff0c;当一个或多个线程调用await方法时&#xff0c;这些线程会阻塞&#xff0c;其它线程调用countDown方法会将计数器减1(调用countDown方…

企业实现员工聊天和转账行为的实时监管

如何解决企业营销团队的管理问题&#xff1f; 在当今竞争激烈的市场环境中&#xff0c;企业营销团队的管理显得尤为重要。营销团队是企业发展的重要支柱&#xff0c;然而&#xff0c;一些常见的问题如员工飞单、私单、辱骂删除客户、离职带走公司客户以及工作不认真、工作量无…

Java笔记-PrintWriter无文件或文件内容为空

代码是这样的&#xff1a; PrintWriter out new PrintWriter(fileName); out.println(object.getValue()); out.close(); 查了下这个类&#xff0c;出现问题不会报异常。 但可以用checkError()函数返回值&#xff0c;判断是否有错误。 如果发现无文件或者文件内容为空&#…

C# Onnx DIS高精度图像二类分割

目录 介绍 效果 模型信息 项目 代码 下载 介绍 github地址&#xff1a;https://github.com/xuebinqin/DIS This is the repo for our new project Highly Accurate Dichotomous Image Segmentation 对应的paper是ECCV2022的一篇文章《Highly Accurate Dichotomous Imag…

猫罐头品牌排行榜盘点!猫罐头哪个牌子好?

很多猫主人会发现他们家的猫咪可能对猫粮感到腻了&#xff0c;或者猫咪平时不爱喝水&#xff0c;还有一些主人可能会注意到猫咪太瘦了&#xff0c;想尝试给它们添加一些猫罐头&#xff0c;但又不确定如何选择。目前市场上的猫罐头品牌众多&#xff0c;确实让人有些困惑。那么&a…

Cesium 问题:输出的 纬度 latitude 是 0

文章目录 问题分析问题 在坐标转换的时候,出现如下问题 分析 在检查代码后,发现我将转换之前的高度默认设置为了 0 ,因此没能正确转换 let positionsOnCircle = [];// 圆面边缘的点 let numPoints = 360; for (let i

OpenAI | 解雇奥特曼后 ChatGPT将何去何从

大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 11 月 17 日,OpenAI 董事会突然宣布解雇联合创始人兼首席执行官 Sam Altman,原因是…

【计算机组成体系结构】存储系统基本概念

一、存储器的层次化结构 CPU无法直接与辅存传输数据&#xff0c;因为CPU的处理速度大于辅存的读写速度&#xff0c;如果直接交互会拖累CPU的速度。所以需要先把辅存中的数据写入主存再与CPU进行数据传输。 Cache&#xff0c;高速缓存在主存和CPU之间。存在Cache的原因是主存的…

静态文件鉴权

​ 静态文件鉴权的解决方案 背景介绍 XX业务系统作为BXX业务系统的孪生姐妹系统&#xff0c;是对BXX受理业务的强力补充系统&#xff0c;他允许操作员拿着IPAD&#xff0c;和客户约定地点上门受理业务。 因一些业务的受理&#xff0c;按照最新的业务规章制度&#xff0c;需…

React中封装echarts图表组件以及自适应窗口变化

文章目录 前言环境代码接口使用效果后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;…

二手车选购参考:Honda CB650R/CBR650R 2019~2023 国产价格享进口本田

本田好&#xff0c;本田妙&#xff0c;本田大法呱呱叫。本田的650系列在国内可以说是伤透了一批老车主的心&#xff0c;上路12万&#xff0c;3年现在还值个4万&#xff0c;搁谁也受不了&#xff0c;正好没什么太好的新闻写&#xff0c;今天就带大家来看看二手车选购参考&#x…

常见树种(贵州省):004杨树种类

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、响叶杨…

Linux内核调试篇——获取内核函数地址的四种方法(一文解决)

在内核调试中&#xff0c;经常需要知道某个函数的地址&#xff0c;或者根据函数地址找到对应的函数&#xff0c;从而进行更深一步的debug。 下面介绍四种获取内核函数地址的方法&#xff1a; 1、System.map 在编译Linux内核时&#xff0c;会产生一个内核映像文件System.map&…

全志R128内存泄漏调试案例

内存泄露调试案例 问题背景 硬件&#xff1a;R128 软件&#xff1a;FreeRTOS rtplayer_test(Cedarx) AudioSystem 问题复现 复现步骤&#xff1a; rtplayer_test /data/boot.mp3串口输入"l", 循环播放串口输入"b" , 播放器后台执行 具体表现 rtpla…

软信天成:干货分享,如何实施云迁移策略!

当下&#xff0c;数据管理正在经历着一场时代的巨变。过去&#xff0c;本地数据库和数据仓库作为企业数据管理的重要手段一直为实现传统业务智能奠定基础。如今&#xff0c;随着云计算应用的迅速激增&#xff0c;越来越多的组织为把握机遇实现更高的业务敏捷度&#xff0c;准备…

项目交互-选择器交互

选择器交互 <div><el-select v-model"valueOne" placeholder"年级"><el-option v-for"item in optionsOne" :key"item.gradeId" :label"item.gradeName" :value"item.gradeId"></el-option&…

高并发分布式架构的演进之路

目录 单体架构 应用数据分离架构 应用数据集群架构 读写分离 / 主从分离架构 引⼊缓存⸺冷热分离架构 垂直分库 业务拆分-微服务 单体架构 一个系统初期&#xff0c;我们需要利⽤我们精⼲的技术团队&#xff0c;快速将业务系统投⼊市场进⾏检验&#xff0c;并且可以迅速…

安卓主板_MTK安卓一体机方案定制

安卓一体机主板集成多媒体解码、3G&#xff08;4G/5G可选&#xff09;模块&#xff0c;GPS&#xff0c;液晶驱动、WIFI、蓝牙、串口于一体&#xff0c;支持绝大部分当前流行的视频及图片格式解码。支持MIPI接口的1280*720分辨率的显示屏&#xff0c;最大支持1280*720P解码。大大…

非上市公司的财务报表可以找到吗?

企业财务报表 财务报表是反映企业或预算单位一定时期资金、利润状况的会计报表。我国财务报表的种类、格式、编报要求&#xff0c;均由统一的会计制度作出规定&#xff0c;要求企业定期编报。国营工业企业在报告期末应分别编报资金平衡表、专用基金及专用拨款表&#xff0c;基…

java中的抽象

1.当一个类中给出的信息不够全面时&#xff0c;&#xff08;比方说有无法确定的行为&#xff09;&#xff0c;它给出的信息不足以描绘出一个具体的对象&#xff0c;这时我们往往不会实例化该类&#xff0c;这种类就是抽象类。 2. 在Java中&#xff0c;我们通过在类前添加关键字…