前言
無論是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ù)組、集合,本篇文章只是作為一個簡單的了解。