HarmonyOS NEXT开发:ArkTS Collections与原生API方法的行为差异对比

ArkTS提供了Sendable数据相关的容器集,接口行为与原生API存在部分差异,具体可见下文对比。

Array

原生API方法ArkTS容器集方法是否有行为差异在ArkTS容器中的差异表现
length: numberreadonly length: number为了防止undefined扩散,不允许设置length。
new(arrayLength ?: number): any[]static create(arrayLength: number, initialValue: T): Array为了防止undefined扩散,构造函数中必须提供一个初始值的构造函数。
new <T>(arrayLength: number): T[]constructor()/
new <T>(...items: T[]): T[]constructor(first: T, ...left: T[])为了防止undefined扩散,构造函数中必须提供一个初始值的构造函数,继承场景下,无法调用该函数进行对象构造。
from<T>(arrayLike: ArrayLike<T>): T[]static from<T>(arrayLike: ArrayLike<T>): Array<T>/
pop(): T | undefinedpop(): T | undefined不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。
push(...items: T[]): numberpush(...items: T[]): number不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。
concat(...items: ConcatArray<T>[]): T[]concat(...items: ConcatArray<T>[]): Array<T>不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。
concat(...items: (T | ConcatArray<T>)[]): T[]concat(...items: ConcatArray<T>[]): Array<T>不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。
join(separator?: string): stringjoin(separator?: string): string/
shift(): T | undefinedshift(): T | undefined不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。
slice(start?: number, end?: number): T[]slice(start?: number, end?: number): Array<T>/
sort(compareFn?: (a: T, b: T) => number): thissort(compareFn?: (a: T, b: T) => number): Array<T>

1. 不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。

2. 继承场景下,无法获得实际类型的返回值。

unshift(...items: T[]): numberunshift(...items: T[]): number不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。
indexOf(searchElement: T, fromIndex?: number): numberindexOf(searchElement: T, fromIndex?: number): number/
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): voidforEach(callbackFn: (value: T, index: number, array: Array<T>) => void): voidArkTS不支持this,因此不支持thisArg参数。
map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]map<U>(callbackFn: (value: T, index: number, array: Array<T>) => U): Array<U>ArkTS不支持this,因此不支持thisArg参数。
filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]filter(predicate: (value: T, index: number, array: Array<T>) => boolean): Array<T>ArkTS不支持this,因此不支持thisArg参数。
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): Treduce(callbackFn: (previousValue: T, currentValue: T, currentIndex: number, array: Array<T>) => T): T/
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): Ureduce<U>(callbackFn: (previousValue: U, currentValue: T, currentIndex: number, array: Array<T>) => U, initialValue: U): U/
[n: number]: T[index: number]: T不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。
findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): numberfindIndex(predicate: (value: T, index: number, obj: Array<T>) => boolean): numberArkTS不支持this,因此不支持thisArg参数。
fill(value: T, start?: number, end?: number): thisfill(value: T, start?: number, end?: number): Array<T>

1. 不允许在遍历、访问过程中进行元素的增、删、改操作,否则会抛出异常。

2. 继承场景下,无法获得实际类型的返回值。

entries(): IterableIterator<[number, T]>entries(): IterableIterator<[number, T]>/
keys(): IterableIterator<number>keys(): IterableIterator<number>/
values(): IterableIterator<T>values(): IterableIterator<T>/
includes(searchElement: T, fromIndex?: number): booleanincludes(searchElement: T, fromIndex?: number): boolean/
at(index: number): T | undefinedat(index: number): T | undefined/

ArrayBuffer

原生API方法ArkTS容器集方法是否有行为差异在ArkTS容器中的差异表现
readonly byteLength: numberreadonly byteLength: number/
slice(begin: number, end?: number): ArrayBufferslice(begin: number, end?: number): ArrayBuffer/
new(byteLength: number): ArrayBufferconstructor(byteLength: number)/

TypedArray(以Int8Array为例)

原生API方法ArkTS容器集方法是否有行为差异在ArkTS容器中的差异表现
readonly buffer: ArrayBufferLikereadonly buffer: ArrayBuffer/
readonly byteLength: numberreadonly byteLength: number/
readonly byteOffset: numberreadonly byteOffset: number/
readonly length: numberreadonly length: number/
readonly BYTES_PER_ELEMENT: numberstatic readonly BYTES_PER_ELEMENT: number/
copyWithin(target: number, start: number, end?: number): thiscopyWithin(target: number, start: number, end?: number): Int8Array不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
every(predicate: (value: number, index: number, array: Int8Array) => unknown, thisArg?: any): booleanevery(predicate: TypedArrayPredicateFn<number, Int8Array>): boolean

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. ArkTS不支持this,因此不支持thisArg参数。

fill(value: number, start?: number, end?: number): thisfill(value: number, start?: number, end?: number): Int8Array不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
filter(predicate: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Arrayfilter(predicate: TypedArrayPredicateFn<number, Int8Array>): Int8Array

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. ArkTS不支持this,因此不支持thisArg参数。

find(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number | undefinedfind(predicate: TypedArrayPredicateFn<number, Int8Array>): number | undefined

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. ArkTS不支持this,因此不支持thisArg参数。

findIndex(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): numberfindIndex(predicate: TypedArrayPredicateFn<number, Int8Array>): numberArkTS不支持this,因此不支持thisArg参数。
forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): voidforEach(callbackFn: (value: number, index: number, array: Int8Array) => void): void

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. ArkTS不支持this,因此不支持thisArg参数。

indexOf(searchElement: number, fromIndex?: number): numberindexOf(searchElement: number, fromIndex?: number): number/
join(separator?: string): stringjoin(separator?: string): string/
map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Arraymap(callbackFn: TypedArrayForEachCallback<number, Int8Array>): Int8Array

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. ArkTS不支持this,因此不支持thisArg参数。

reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number): numberreduce(callbackFn: TypedArrayReduceCallback<number, number, Int8Array>): number/
reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number): numberreduce(callbackFn: TypedArrayReduceCallback<number, number, Int8Array>, initialValue: number): number/
reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): Ureduce<U>(callbackFn: TypedArrayReduceCallback<U, number, Int8Array>, initialValue: U): U/
reverse(): Int8Arrayreverse(): Int8Array/
set(array: ArrayLike<number>, offset?: number): voidset(array: ArrayLike<number>, offset?: number): void不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
slice(start?: number, end?: number): Int8Arrayslice(start?: number, end?: number): Int8Array/
some(predicate: (value: number, index: number, array: Int8Array) => unknown, thisArg?: any): booleansome(predicate: TypedArrayPredicateFn<number, Int8Array>): booleanArkTS不支持this,因此不支持thisArg参数。
sort(compareFn?: (a: number, b: number) => number): thissort(compareFn?: TypedArrayCompareFn<number>): Int8Array

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. 继承场景下,无法获得实际类型的返回值。

subarray(begin?: number, end?: number): Int8Arraysubarray(begin?: number, end?: number): Int8Array不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
[index: number]: number[index: number]: number不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
entries(): IterableIterator<[number, number]>entries(): IterableIterator<[number, number]>/
keys(): IterableIterator<number>keys(): IterableIterator<number>/
values(): IterableIterator<number>values(): IterableIterator<number>/
includes(searchElement: number, fromIndex?: number): booleanincludes(searchElement: number, fromIndex?: number): boolean/
at(index: number): number | undefinedat(index: number): number | undefined/
new(length: number): Int8Arrayconstructor(length: number)/
new(array: ArrayLike<number> | ArrayBufferLike): Int8Arrayconstructor(array: ArrayLike<number> | ArrayBuffer)/
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int8Arrayconstructor(buffer: ArrayBuffer, byteOffset?: number, length?: number)/
from(arrayLike: ArrayLike<number>): Int8Arraystatic from(arrayLike: ArrayLike<number>): Int8Array/
from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Arraystatic from<T>(arrayLike: ArrayLike<T>, mapFn: TypedArrayFromMapFn<T, number>): Int8ArrayArkTS不支持this,因此不支持thisArg参数。
from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Arraystatic from(arrayLike: Iterable<number>, mapFn?: TypedArrayFromMapFn<number, number>): Int8ArrayArkTS不支持this,因此不支持thisArg参数。

Map

原生API方法ArkTS容器集方法是否有行为差异在ArkTS容器中的差异表现
readonly size: numberreadonly size: number不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
clear(): voidclear(): void不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
delete(key: K): booleandelete(key: K): boolean不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): voidforEach(callbackFn: (value: V, key: K, map: Map<K, V>) => void): void

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. ArkTS不支持this,因此不支持thisArg参数。

get(key: K): V | undefinedget(key: K): V | undefined不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
has(key: K): booleanhas(key: K): boolean不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
set(key: K, value: V): thisset(key: K, value: V): Map<K, V>不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
entries(): IterableIterator<[K, V]>entries(): IterableIterator<[K, V]>/
keys(): IterableIterator<K>keys(): IterableIterator<K>/
values(): IterableIterator<V>values(): IterableIterator<V>/
new <K, V>(entries?: readonly (readonly [K, V])[] | null): Map<K, V>constructor(entries?: readonly (readonly [K, V])[] | null)构造时传入的k,v键值不能是非Sendable数据,否则编译会报错。

Set

原生API方法ArkTS容器集方法是否有行为差异在ArkTS容器中的差异表现
readonly size: numberreadonly size: numberSendable类和接口中不允许使用计算属性名称(arkts-sendable-compated-prop-name)。
add(value: T): thisadd(value: T): Set<T>不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
clear(): voidclear(): void不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
delete(value: T): booleandelete(value: T): boolean不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): voidforEach(callbackFn: (value: T, value2: T, set: Set<T>) => void): void

1. 不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。

2. ArkTS不支持this,因此不支持thisArg参数。

has(value: T): booleanhas(value: T): boolean不允许在遍历、访问过程中进行元素的增、删、改操作否则会抛出异常。
entries(): IterableIterator<[T, T]>entries(): IterableIterator<[T, T]>/
keys(): IterableIterator<T>keys(): IterableIterator<T>/
values(): IterableIterator<T>values(): IterableIterator<T>Sendable类和接口中不允许使用计算属性名称(arkts-sendable-compated-prop-name)。
new <T = any>(values?: readonly T[] | null): Set<T>constructor(values?: readonly T[] | null)构造时传入数据不能是非Sendable数据,否则编译会报错。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

点击领取→【纯血版鸿蒙全套最新学习资料】(安全链接,放心点击希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取~限时开源!!


 鸿蒙(HarmonyOS NEXT)最新学习路线

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。


HarmonyOS Next 最新全套视频教程

 《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

大厂面试必问面试题

鸿蒙南向开发技术

鸿蒙APP开发必备


请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,才能在这个变革的时代中立于不败之地。 

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值