HarmonyOS開發(fā):ArkTs常見數(shù)據(jù)類型

前言

無論是Android還是iOS開發(fā),都提供了多種數(shù)據(jù)類型用于常見的業(yè)務(wù)開發(fā),但在ArkTs中,數(shù)據(jù)類型就大有不同,比如int,float,double,long統(tǒng)一就是number類型,當(dāng)然了也不存在char類型,本文針對開發(fā)中常用的數(shù)據(jù)類型,做一個簡單的概述,便于第一次接觸到ArkTs語言開發(fā)的同學(xué),能夠快速的對數(shù)據(jù)類型做一個了解。

ArkTs是TypeScript的超集,其數(shù)據(jù)類型也是基于TypeScript而來,除了原始5種數(shù)據(jù)類型之外,還有一種對象類型,再結(jié)合ES6中的新類型Symbol和ES10中的新類型BigInt,以及包含常見的枚舉、任意類型等等,大概有十多種,但常見常用的就那么幾種。

數(shù)據(jù)類型匯總?cè)缦拢?/p>

數(shù)據(jù)類型 概述
number 數(shù)值
boolean 布爾
string 字符串
undefined 一個未定義或不存在的值
null
object 對象
Symbol 獨一無二的值
bigint 任意大的整數(shù)
enum 枚舉
any 任意
unknown 未知類型
void 沒有任何返回值的類型
never 永遠不存在的類型

在日常的開發(fā)中部分會高頻次的出現(xiàn),下面我們就一一的做下分析,由于篇幅有限,會分為兩篇文章進行概述;如何判斷當(dāng)前數(shù)據(jù)是哪一種類型,可以使用typeof關(guān)鍵字來判斷,當(dāng)然了,也并不是所有的類型都可以判斷出來。

本文的大綱如下:

1、數(shù)值類型number
2、布爾類型boolean
3、字符串類型string
4、對象object
5、未定義或不存在的值undefined
6、空null
7、相關(guān)總結(jié)

一、數(shù)值類型number

記住,凡是表示數(shù)值的,不管是二進制還是八進制,還是其他進制,疑惑是長整數(shù),小數(shù),負數(shù)等等,只有一個類型表示,那就是number。

局部聲明須帶關(guān)鍵字

    let a: number = 0 //整數(shù)
    let b: number = -100 //負數(shù)
    let c: number = 88.88 //小數(shù)
    let d: number = 0b1010 //二進制 ES6
    let e: number = 0o744 //八進制  ES6

成員聲明不帶關(guān)鍵字

  a: number = 0 //整數(shù)
  b: number = -100 //負數(shù)
  c: number = 88.88 //小數(shù)
  d: number = 0b1010 //二進制
  e: number = 0o744 //八進制

需要注意的是TypeScript中有類型推斷功能,類型可以不寫也不會報錯,為了避免冗余,日后的書寫也建議舍棄類型,標(biāo)準(zhǔn)如下:

局部聲明

    let a = 0 //整數(shù)
    let b = -100 //負數(shù)
    let c = 88.88 //小數(shù)
    let d = 0b1010 //二進制
    let e = 0o744 //八進制

成員聲明

  a = 0 //整數(shù)
  b = -100 //負數(shù)
  c = 88.88 //小數(shù)
  d = 0b1010 //二進制
  e = 0o744 //八進制

當(dāng)然了以上的前提必須擁有默認(rèn)值,如果不定義默認(rèn)值,其類型可攜帶可不攜帶,但是為了確定類型,方便之后的代碼調(diào)用,建議還是帶上類型比較好,如下:

局部聲明

    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,后續(xù)可以賦值任何類型數(shù)據(jù)。

二、布爾類型boolean

布爾類型沒什么好說的,用于標(biāo)識true和false。

局部聲明

//帶默認(rèn)值

let isBoolean: boolean = false

//類型推斷后省略類型寫法

let isBoolean = false

//不帶默認(rèn)值

let isBoolean: boolean

成員聲明

//帶默認(rèn)值

isBoolean: boolean = false

//類型推斷后省略類型寫法

isBoolean = false

//不帶默認(rèn)值

isBoolean: boolean

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

三、字符串類型string

字符串使用,可單引號也可雙引號,都是表示一個字符串。

局部聲明

//帶默認(rèn)值

let singleQuotes: string = '單引號字符串'

let doubleQuotes: string = "雙引號字符串"

//類型推斷后省略類型寫法

let singleQuotes = '單引號字符串'

let doubleQuotes = "雙引號字符串"

//不帶默認(rèn)值

let singleQuotes: string

let doubleQuotes: string

成員聲明

//帶默認(rèn)值

singleQuotes: string = '單引號字符串'

doubleQuotes: string = "雙引號字符串"

//類型推斷后省略類型寫法

singleQuotes = '單引號字符串'

doubleQuotes = "雙引號字符串"

//不帶默認(rèn)值

singleQuotes: string

doubleQuotes: string

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

四、對象object

在ArkTs中,不管你是一個普通的對象,還是一個數(shù)組,元組,集合等等,都是一個對象類型。

    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("當(dāng)前數(shù)據(jù)類型1:" + typeof obj)
    console.log("當(dāng)前數(shù)據(jù)類型2:" + typeof test)
    console.log("當(dāng)前數(shù)據(jù)類型3:" + typeof numberArray)
    console.log("當(dāng)前數(shù)據(jù)類型4:" + typeof numberArrayObj)
    console.log("當(dāng)前數(shù)據(jù)類型5:" + typeof tuple)
    console.log("當(dāng)前數(shù)據(jù)類型6:" + typeof list)
    console.log("當(dāng)前數(shù)據(jù)類型7:" + typeof map)

日志打印如下:

1、普通對象

和其他語言的聲明及使用方式基本一致,可以對其變量私有,通過get/set方法進行獲取,也有私有和公共關(guān)鍵字。

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

除了以上的對象創(chuàng)建和使用之外,在ArkTs中也支持直接花括號的形式聲明:

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

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

2、數(shù)組

數(shù)組有兩種聲明方式,一種是使用Array對象,一種直接使用中括號[]。

let array = Array<number>()

let arr = []

默認(rèn)值

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

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

數(shù)組如果沒聲明類型,它是可以并存多種類型數(shù)據(jù)的,如下所示:

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

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

所以在以后的開發(fā)中,對于數(shù)組而言,大家盡量精確數(shù)據(jù)類型,方便后續(xù)的使用,針對數(shù)組的操作,比如增刪改查,后續(xù)的文章會有講解,大家可以持續(xù)關(guān)注。

3、元組

如果存儲的元素數(shù)據(jù)類型不同,則需要使用元組,元組中允許存儲不同類型的元素,元組可以作為參數(shù)傳遞給函數(shù)。

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

日志打?。?/p>

4、集合

無論是單列集合list,還是雙列集合map,都吸取了Java中的優(yōu)點,基本關(guān)于集合操作的方法,在ArkTs中該有的都有,本篇就不過多的介紹了。

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

當(dāng)你定義了一個變量而為賦值時,那么它就是undefined。

比如我定義了一個變量,而為進行賦值,如下:

    let test

    console.log(typeof test)

控制臺打印如下:

那么在以后的開發(fā)中,如果你不確定某個數(shù)據(jù)是否有值,無論對象還是其他類型,都可以進行undefined判斷:

let test

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

六、空null

null是一個表示"空值"的對象,通常用來表示變量的值為“沒有值”,如果需要明確表示一個變量的值為空,就可以使用 null。

let test=null

console.log(test)

上述的打印結(jié)果為null,和undefined不同的是,需要設(shè)置為null,如果不設(shè)置就是undefined,需要注意的是,null 和 undefined 在進行比較時,它們的值相等,但數(shù)據(jù)類型不同。

如下比較:

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

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

除了變量的默認(rèn)值賦值為null之外, 還可以用來作為函數(shù)的返回值,當(dāng)函數(shù)沒有需要返回的值時,可以使用 return null,表示函數(shù)的返回值為空。

null和undefined進行比較

1、null 表示對象為空,而 undefined 表示缺少值。

2、聲明變量但未賦值時,變量的值為 undefined,當(dāng)需要表示空值時,可以使用 null。

3、在比較時,null 和 undefined 的值相等,但數(shù)據(jù)類型不同。

九、相關(guān)總結(jié)

ArkTs是TypeScript的超集,針對數(shù)據(jù)類型,說強它則強,說不強也不強,比如,一個變量,如未指定數(shù)據(jù)類型,它可以進行任何類型賦值,以最后一個賦值為最終結(jié)果。

    let test// any

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

    console.log(test)

上述則會打印true,所有在以后的開發(fā)中,大家盡量要對數(shù)據(jù)進行類型限制,既方便與類型區(qū)分,也方便錯誤的甄別,更加有利于代碼的健壯。

關(guān)于數(shù)據(jù)類型中的元組、數(shù)組、集合,本篇文章只是作為一個簡單的了解。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容