当前位置:首页>鸿蒙APP>《从零到一:鸿蒙原生应用开发实战》第5篇:ArkTS 基础语法速成(下)—— 数组、对象、解构、扩展运算符

《从零到一:鸿蒙原生应用开发实战》第5篇:ArkTS 基础语法速成(下)—— 数组、对象、解构、扩展运算符

  • 2026-11-03 10:20:14
《从零到一:鸿蒙原生应用开发实战》第5篇:ArkTS 基础语法速成(下)—— 数组、对象、解构、扩展运算符

你好,我是华鸿技术栈的作者。

上一篇我们过了 ArkTS 基础语法的前半部分——数据类型、变量声明、函数、箭头函数。那篇没有 UI,全是代码片段,但那些是后面写组件的地基。

今天接着往下,把剩下的几个高频语法点扫完:数组操作、对象、解构、扩展运算符。这几样东西在写界面的时候会反复出现,比如列表渲染、接口数据处理、组件传参,碰到就讲,用不上的一笔带过。

5.1 数组操作:列表渲染的基础

数组就是用来存一组数据的容器。在鸿蒙开发里,文章列表、收藏列表、菜单选项,背后都是数组。

声明数组

两种写法,效果一样,第一种更常用:

typescript

const list: string[] = ['鸿蒙', 'ArkTS', 'ArkUI']; const list2: Array= ['鸿蒙', 'ArkTS', 'ArkUI'];

string[] 表示这个数组里装的都是字符串。如果是数字数组就写 number[],对象数组写 Article[]。

数组的常用操作

这些方法在实际开发里用到飞起,每一个都可能在某个场景里出现:

typescript

const arr: number[] = [1, 2, 3, 4, 5];

// 长度arr.length;  // 5

// 访问某个位置(索引从 0 开始)arr[0];  // 1

// 末尾加一个arr.push(6);  // arr 变成 [1, 2, 3, 4, 5, 6]

// 末尾删一个arr.pop();  // 删掉 6,arr 变回 [1, 2, 3, 4, 5]

// 前面加一个arr.unshift(0);  // arr 变成 [0, 1, 2, 3, 4, 5]

// 前面删一个arr.shift();  // 删掉 0,arr 变回 [1, 2, 3, 4, 5]

// 查找某个值的位置arr.indexOf(3);  // 2

遍历数组:forEach 和 for...of

遍历就是挨个访问数组里的每一项:

typescript

const list: string[] = ['鸿蒙', 'ArkTS', 'ArkUI'];

// 方式一:forEachlist.forEach((item, index) => {  console.log(第${index}项:${item});});

// 方式二:for…of(更常用)for (const item of list) {  console.log(item);}

map 和 filter:数据处理的核心

map 把一个数组映射成另一个数组,filter 从数组里筛出一部分:

这两个方法在数据转换场景里经常用到。接口返回了一堆文章数据,你要取前 10 条、或者只取某个分类的,就靠 filter。你要把接口返回的字段名转换成页面需要的格式,就靠 map。

5.2 对象:描述结构化数据

对象就是把一组相关的数据打包在一起。一篇文章有标题、作者、阅读量,这三个东西散着传很乱,打包成一个对象就清晰多了:

typescript

const article = {

  title: '鸿蒙开发入门',

  author: '华鸿技术栈',

  readCount: 1280

};

访问对象属性

typescript

console.log(article.title);       // '鸿蒙开发入门' console.log(article['author']);   // '华鸿技术栈'

点号访问最常用,括号访问用在属性名是变量或包含特殊字符的时候。

修改和添加属性

typescript

article.readCount = 1500;  // 修改已有属性article.isPinned = true;   // 添加新属性

type 定义对象的结构

用 type 给对象定义一个“固定形状”,后面用这个类型的时候,属性和类型都会受到约束,写错会报编译错误:

typescript

type Article = {  title: string;  author: string;  readCount: number;};

const article: Article = {  title: '鸿蒙开发入门',  author: '华鸿技术栈',  readCount: 1280};

这种写法在接口数据处理、组件传参时非常常用。后面讲网络请求和 JSON 解析时,第一步就是先定义接口返回的数据模型,用的就是这个语法。

对象套对象:嵌套结构

实际开发中数据很少是扁平的,经常一层套一层。比如一个人的信息里包含一个“背包”对象:

typescript

type Bag = {size: string;color: string;};

type Person = {name: string;mine: Bag;};

const person: Person = {name: '张三',mine: {size: '大',color: '蓝色'}};

console.log(person.mine.color); // '蓝色'

后面讲 @ObservedV2 和 @Trace 的时候,嵌套对象的响应式监听就是在这个基础上展开的。

5.3 解构:把对象和数组拆开用的简便写法

解构就是把对象或数组里的值“拆”出来,直接赋值给变量。不用每次都写 对象.属性 这种啰嗦写法。

对象解构

typescript

const article = {

  title: '鸿蒙开发入门',

  author: '华鸿技术栈',

  readCount: 1280

};

// 把三个属性分别取出来

const { title, author, readCount } = article;

console.log(title);      // '鸿蒙开发入门'

console.log(author);     // '华鸿技术栈'

数组解构

typescript

const list: string[] = ['鸿蒙', 'ArkTS', 'ArkUI'];

const [first, second, third] = list;

console.log(first);   // '鸿蒙'

console.log(second);  // 'ArkTS'

实际开发中的用法

解构最常用的两个场景:

场景一:处理接口返回的数据。 接口通常返回一大坨 JSON,但你只需要其中几个字段:

场景二:函数参数解构。 函数需要多个参数时,可以把参数打包成一个对象传进去,函数内部解构取用:

这种写法在组件封装时很常见,传参清晰,不用记参数顺序。

5.4 扩展运算符:合并、复制、传参都用它

扩展运算符用三个点 ... 表示,能把数组或对象“展开”到另一个数组或对象里。记住,扩展运算符是浅拷贝,只复制对象的第一层属性,嵌套对象仍然是共享引用。

合并数组

typescript

const arr1: number[] = [1, 2, 3];const arr2: number[] = [4, 5, 6];const merged: number[] = […arr1, …arr2];// merged = [1, 2, 3, 4, 5, 6]

复制数组

typescript

const baseConfig = {  fontSize: 16,  fontColor: '#333333'};

const myConfig = {  …baseConfig,  fontSize: 18  // 覆盖 baseConfig 里的 fontSize};// myConfig = { fontSize: 18, fontColor: '#333333' }

合并对象

typescript

const baseConfig = {  fontSize: 16,  fontColor: '#333333'};

const myConfig = {  …baseConfig,  fontSize: 18  // 覆盖 baseConfig 里的 fontSize};// myConfig = { fontSize: 18, fontColor: '#333333' }

后面写组件时,你可以用扩展运算符合并默认样式和自定义样式,不用一个属性一个属性地写,代码少很多。

函数参数展开

typescript

function sum(a: number, b: number, c: number): number {  return a + b + c;}

const numbers: number[] = [1, 2, 3];sum(…numbers);  // 等价于 sum(1, 2, 3)

5.5 动手写:这几个语法点合起来用一遍

下面这段代码把本篇的数组、对象、解构、扩展运算符串在一起。不用跑,读一遍,感受一下这些语法在实际代码里是怎么配合的:

这段代码里没有 UI,但逻辑和后面做列表渲染、数据格式化时写的代码几乎一模一样。现在先混个眼熟,后面写到的时候不会觉得陌生。

5.6 本篇总结

这一篇加上上一篇,把 ArkTS 基础语法里写 UI 常用的部分都过了一遍。你不用一次性全记住,用到的时候回来查就行。写多了自然会刻进肌肉记忆。

这次讲的四个点:

知识点
关键写法
在 UI 开发里干什么用
数组
push
、forEach、map、filter
存列表数据、遍历渲染、数据转换
对象
{}
、type 定义结构
描述结构化数据,定义数据模型
解构
const { a, b } = obj
、const [a, b] = arr
从对象和数组里快速取值,函数参数处理
扩展运算符
...arr
、...obj
合并数组、复制对象、合并样式配置

语法篇到此结束。 下一篇我们正式进入 UI 实战——用学到的语法写第一个声明式 UI 组件,搞懂命令式和声明式的区别,手写一个计数器。从下一篇开始,代码里会出现真正的界面。

本文由「华鸿技术栈」原创发布,专注鸿蒙原生应用与元服务开发。分享实战代码、源码解析、性能优化及生态前沿。不讲虚的,只上干货。转载请联系授权。

最新文章

随机文章