鴻蒙 數(shù)據(jù)類型分類

此文章內(nèi)容兼容API12,使用harmony next應(yīng)用開發(fā)

基本數(shù)據(jù)類型

Number
整數(shù)

  • 十進(jìn)制
  • 十六進(jìn)制, 0x 開頭
  • 八進(jìn)制,0o開頭
  • 二進(jìn)制,0b開頭

浮點(diǎn)數(shù)

  • 指數(shù)用e開頭
let n4 = 1e2;  // 1 × (10 ^ 2) = 100

Boolean
String:支持模板替換,實(shí)現(xiàn)格式化

let s = 'test'
let result = `printf ${s}`

Void
Object:基類型
Array
Enum
:聯(lián)合類型

let s:boolean | number | string | Cat | Dog= true
if( s  instanceof  boolean) { ... }
if( typeof s == 'boolean' )

ESObject:ESObject主要用于在ArkTS和TS/JS跨語言調(diào)用的場景中作為類型標(biāo)注

A.testSDK({'param1':'11','param2':2})
//har包中
static testSDK(param: ESObject): void;

運(yùn)算符

賦值運(yùn)算符
+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=
比較運(yùn)算符
=== !== == != > >= < <=
1,=== 和 == 的區(qū)別
=== 是嚴(yán)格判斷相等,不僅判斷數(shù)值,還判斷操作數(shù)類型
算術(shù)運(yùn)算符
-、+、--、++
位運(yùn)算符

運(yùn)算符 說明
a & b 按位與:如果兩個操作數(shù)的對應(yīng)位都為1,則將這個位設(shè)置為1,否則設(shè)置為0。
a | b 按位或:如果兩個操作數(shù)的相應(yīng)位中至少有一個為1,則將這個位設(shè)置為1,否則設(shè)置為0
a ^ b 按位異或:如果兩個操作數(shù)的對應(yīng)位不同,則將這個位設(shè)置為1,否則設(shè)置為0。
~ a 按位非:反轉(zhuǎn)操作數(shù)的位。
a << b 左移:將a的二進(jìn)制表示向左移b位。
a >> b 算術(shù)右移:將a的二進(jìn)制表示向右移b位,帶符號擴(kuò)展。
a >>> b 邏輯右移:將a的二進(jìn)制表示向右移b位,左邊補(bǔ)0。

邏輯運(yùn)算符
&& || ! 與或非
1,空值合并運(yùn)算符(??),當(dāng)左側(cè)操作數(shù)為 null 或 undefined 時,返回右側(cè)操作數(shù),否則返回左側(cè)

this.showTip = null
let result = this.showTip??'這是一片荒原'

2,邏輯空賦值運(yùn)算符(x ??= y), 當(dāng)x為 null 或 undefined 時,將y 賦值給 x

this.showTip = null
x ?? = '這是一片荒原'

3,可選鏈運(yùn)算符(?.)
當(dāng)且僅當(dāng)左側(cè)操作數(shù)不為 null 或 undefined 時,才繼續(xù)訪問右側(cè)數(shù)據(jù)

其他類型

容器類

1,Array
Array
ArrayList
List : 單向鏈表,增刪較ArrayList更有效率,通用ArrayList
LinkedList : 雙向鏈表
Queue : 隊(duì)列
Stack : 棧
(1)數(shù)組表達(dá)形式
ArkTS提供了兩種數(shù)組類型的表示方式:T[]和Array<T>。為了代碼的可讀性,建議所有數(shù)組類型均用T[]來表示。

let y: Array<string> = ['a', 'b', 'c'];//不推薦
let y: string[] = ['a', 'b', 'c'];//推薦

(2)Array 和 ArrayList 區(qū)別
Array 長度固定,適用于已知元素?cái)?shù)量且不會改變的情況。它在內(nèi)存中分配一塊連續(xù)的空間來存儲元素,對于直接訪問元素而言速度更快
ArrayList 長度動態(tài)調(diào)整

(3)常用API


array常用API

說一說鴻蒙 數(shù)組常用的API有那些?或者說ArkTS中Array 對象常用 的API?_鴻蒙.includes-CSDN博客

2,Map
HashMap : 存儲鍵值對集合,key唯一,無序
TreeMap : 存儲鍵值對集合,key唯一,有序,效率低
3,Set
HashSet : 存儲 值 的集合,值唯一,支持null,無序
TreeSet : 存儲 值 的集合,值唯一,不支持null,有序,效率低
4,ArrayBuffer
ArrayBuffer,用于存儲和操作 原始二進(jìn)制數(shù)據(jù)的對象,類比于安卓中的byte[]。固定長度。
ArrayBuffer作為一種可轉(zhuǎn)移對象,在線程間傳遞時不需要進(jìn)行拷貝,從而避免了同一份數(shù)據(jù)在主線程和子線程中分別占用內(nèi)存的問題。這種特性在處理大數(shù)據(jù)量時尤為重要,因?yàn)樗苡行p少內(nèi)存占用,提高應(yīng)用性能。

常見用途:

  • 二進(jìn)制數(shù)據(jù)傳輸
  • 圖像和音頻處理。 圖像和音頻數(shù)據(jù),常以二進(jìn)制格式存儲
  • 數(shù)據(jù)加解密

5,TypedArray
TypedArray是多種類型的統(tǒng)稱,底層基于ArrayBuffer實(shí)現(xiàn),提供了對ArrayBuffer中二進(jìn)制數(shù)據(jù)的訪問和操作能力。
目前支持包括Int8Array、Uint8Array、Int16Array、Uint16Array、Int32Array、Uint32Array、Uint8ClampedArray以及Float32Array。

ArrayBuffer 是容器,TypedArray是訪問和操作方法,TypedArray在創(chuàng)建時,需要指定一個ArrayBuffer作為它的數(shù)據(jù)緩沖區(qū)。

互相轉(zhuǎn)換:

//ArrayBuffer  轉(zhuǎn) TypedArray
let typedArray = new Uint8Array(arrayBuffer)
//TypedArray 轉(zhuǎn) ArrayBuffer  
let arrayBuffer = typedArray.buffer

6,BitVector
底層基于數(shù)組實(shí)現(xiàn)。BitVector中存儲元素為bit值,能存儲和處理bit級別的操作。
7,ConcatArray
8,Record
Record<Keys, Type> 構(gòu)造了一個對象類型,存儲鍵值對,也就是強(qiáng)類型的Map
Record 和 Map / HashMap區(qū)別

  • Record 的key 只可以是 string | number ,Map 的 key 可以任意類型 Any
  • map 比 Record 更靈活,適用于頻繁增刪改的場景
  • Record 查詢速度很快,適用于頻繁讀取和展示數(shù)據(jù)的場景

JSON

json 轉(zhuǎn)string

JSON.stringify(obj)

string轉(zhuǎn)json

JSON.parse(str)

undefined null

null 指 不存在任何對象,“什么都沒有”;undefined 指尚未分配變量,或尚未生命變量,“尚未分配”
檢測是否是空值,即 undefined 或 null

if(myObj)

檢測是否為undefined

if(typeof undefined == 'undefined ')

1,空值合并運(yùn)算符(??),可以處理 null 或 undefined 情況
空值合并運(yùn)算符(??),當(dāng)左側(cè)操作數(shù)為 null 或 undefined 時,返回右側(cè)操作數(shù),否則返回左側(cè)

let result = this.showTip??'這是一片荒原'
//展示效果是: 
if(this.showTip){
  result = this.showTip
}else {
  result = '這是一片荒原'
}

BigNumber

當(dāng)涉及到復(fù)雜計(jì)算,高精度數(shù)據(jù),和海量數(shù)據(jù)處理時,推薦使用BigNumber
bignumber.js 是一個JavaScript庫,用于任意精度的十進(jìn)制和非十進(jìn)制算術(shù)運(yùn)算。

bignumber.js:A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic - GitCode

  • 支持整數(shù)與小數(shù)
  • 簡單但功能全面的API
  • 比Java的BigDecimal在JavaScript中的實(shí)現(xiàn)更快、更小巧、可能更易用
  • 復(fù)制了JavaScript Number類型的toExponential、toFixed、toPrecision和toString方法
  • 包含toFraction和正確舍入的squareRoot方法
  • 支持加密安全的偽隨機(jī)數(shù)生成
  • 無依賴項(xiàng)
  • 壓縮并gzip后大小僅為8 KB
  • 廣泛的平臺兼容性:僅使用JavaScript 1.5(ECMAScript 3)特性
  • 完善的文檔和測試集

如果需要更小、更簡單的庫,請查看 big.js。 它的大小不到一半,但只處理十進(jìn)制數(shù)字,并且只有大約一半的方法。 它還比這個庫擁有更少的配置選項(xiàng),并不支持NaN或Infinity。

另外也可以看看 decimal.js,該庫添加了對非整數(shù)冪的支持,并根據(jù)指定的位數(shù)進(jìn)行所有操作。

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

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

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