鸿蒙 数据类型分类

此文章内容兼容API12,使用harmony next应用开发

基本数据类型

Number
整数

  • 十进制
  • 十六进制, 0x 开头
  • 八进制,0o开头
  • 二进制,0b开头

浮点数

  • 指数用e开头
let n4 = 1e2;  // 1 × (10 ^ 2) = 100

Boolean
String:支持模板替换,实现格式化

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

Void
Object:基类型
Array
Enum
:联合类型

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

ESObject:ESObject主要用于在ArkTS和TS/JS跨语言调用的场景中作为类型标注

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

运算符

赋值运算符
+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=
比较运算符
=== !== == != > >= < <=
1,=== 和 == 的区别
=== 是严格判断相等,不仅判断数值,还判断操作数类型
算术运算符
-、+、--、++
位运算符

运算符 说明
a & b 按位与:如果两个操作数的对应位都为1,则将这个位设置为1,否则设置为0。
a | b 按位或:如果两个操作数的相应位中至少有一个为1,则将这个位设置为1,否则设置为0
a ^ b 按位异或:如果两个操作数的对应位不同,则将这个位设置为1,否则设置为0。
~ a 按位非:反转操作数的位。
a << b 左移:将a的二进制表示向左移b位。
a >> b 算术右移:将a的二进制表示向右移b位,带符号扩展。
a >>> b 逻辑右移:将a的二进制表示向右移b位,左边补0。

逻辑运算符
&& || ! 与或非
1,空值合并运算符(??),当左侧操作数为 null 或 undefined 时,返回右侧操作数,否则返回左侧

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

2,逻辑空赋值运算符(x ??= y), 当x为 null 或 undefined 时,将y 赋值给 x

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

3,可选链运算符(?.)
当且仅当左侧操作数不为 null 或 undefined 时,才继续访问右侧数据

其他类型

容器类

1,Array
Array
ArrayList
List : 单向链表,增删较ArrayList更有效率,通用ArrayList
LinkedList : 双向链表
Queue : 队列
Stack : 栈
(1)数组表达形式
ArkTS提供了两种数组类型的表示方式:T[]和Array<T>。为了代码的可读性,建议所有数组类型均用T[]来表示。

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

(2)Array 和 ArrayList 区别
Array 长度固定,适用于已知元素数量且不会改变的情况。它在内存中分配一块连续的空间来存储元素,对于直接访问元素而言速度更快
ArrayList 长度动态调整

(3)常用API


array常用API

说一说鸿蒙 数组常用的API有那些?或者说ArkTS中Array 对象常用 的API?_鸿蒙.includes-CSDN博客

2,Map
HashMap : 存储键值对集合,key唯一,无序
TreeMap : 存储键值对集合,key唯一,有序,效率低
3,Set
HashSet : 存储 值 的集合,值唯一,支持null,无序
TreeSet : 存储 值 的集合,值唯一,不支持null,有序,效率低
4,ArrayBuffer
ArrayBuffer,用于存储和操作 原始二进制数据的对象,类比于安卓中的byte[]。固定长度。
ArrayBuffer作为一种可转移对象,在线程间传递时不需要进行拷贝,从而避免了同一份数据在主线程和子线程中分别占用内存的问题。这种特性在处理大数据量时尤为重要,因为它能有效减少内存占用,提高应用性能。

常见用途:

  • 二进制数据传输
  • 图像和音频处理。 图像和音频数据,常以二进制格式存储
  • 数据加解密

5,TypedArray
TypedArray是多种类型的统称,底层基于ArrayBuffer实现,提供了对ArrayBuffer中二进制数据的访问和操作能力。
目前支持包括Int8Array、Uint8Array、Int16Array、Uint16Array、Int32Array、Uint32Array、Uint8ClampedArray以及Float32Array。

ArrayBuffer 是容器,TypedArray是访问和操作方法,TypedArray在创建时,需要指定一个ArrayBuffer作为它的数据缓冲区。

互相转换:

//ArrayBuffer  转 TypedArray
let typedArray = new Uint8Array(arrayBuffer)
//TypedArray 转 ArrayBuffer  
let arrayBuffer = typedArray.buffer

6,BitVector
底层基于数组实现。BitVector中存储元素为bit值,能存储和处理bit级别的操作。
7,ConcatArray
8,Record
Record<Keys, Type> 构造了一个对象类型,存储键值对,也就是强类型的Map
Record 和 Map / HashMap区别

  • Record 的key 只可以是 string | number ,Map 的 key 可以任意类型 Any
  • map 比 Record 更灵活,适用于频繁增删改的场景
  • Record 查询速度很快,适用于频繁读取和展示数据的场景

JSON

json 转string

JSON.stringify(obj)

string转json

JSON.parse(str)

undefined null

null 指 不存在任何对象,“什么都没有”;undefined 指尚未分配变量,或尚未生命变量,“尚未分配”
检测是否是空值,即 undefined 或 null

if(myObj)

检测是否为undefined

if(typeof undefined == 'undefined ')

1,空值合并运算符(??),可以处理 null 或 undefined 情况
空值合并运算符(??),当左侧操作数为 null 或 undefined 时,返回右侧操作数,否则返回左侧

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

BigNumber

当涉及到复杂计算,高精度数据,和海量数据处理时,推荐使用BigNumber
bignumber.js 是一个JavaScript库,用于任意精度的十进制和非十进制算术运算。

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

  • 支持整数与小数
  • 简单但功能全面的API
  • 比Java的BigDecimal在JavaScript中的实现更快、更小巧、可能更易用
  • 复制了JavaScript Number类型的toExponential、toFixed、toPrecision和toString方法
  • 包含toFraction和正确舍入的squareRoot方法
  • 支持加密安全的伪随机数生成
  • 无依赖项
  • 压缩并gzip后大小仅为8 KB
  • 广泛的平台兼容性:仅使用JavaScript 1.5(ECMAScript 3)特性
  • 完善的文档和测试集

如果需要更小、更简单的库,请查看 big.js。 它的大小不到一半,但只处理十进制数字,并且只有大约一半的方法。 它还比这个库拥有更少的配置选项,并不支持NaN或Infinity。

另外也可以看看 decimal.js,该库添加了对非整数幂的支持,并根据指定的位数进行所有操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容