当前位置: 首页 > news >正文

ArkTS 基础语法

运算符、空安全机制和流程控制语句是 ArkTS 里的核心内容,是写出高效、稳定的鸿蒙应用的关键基础。运算符决定了数据怎么运算,空安全能避免程序因为空值而崩溃,流程控制语句能让代码根据不同情况灵活执行。

运算符

ArkTS 中的运算符总共可以分为五大类:赋值运算符、比较运算符、算术运算符、逻辑运算符、位运算符。这些运算符是编写 ArkTS 逻辑、处理数据计算的基础。

赋值运算符

基础赋值:=

复合赋值:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=

let a = 10;
a += 5; // 等价于 a = a + 5;
a -= 5; // 等价于 a = a - 5;
a *= 3; // 等价于 a = a * 3;
a /= 3; // 等价于 a = a / 3;
a %= 2; // 等价于 a = a % 2;

比较运算符

严格比较:=(值与类型均相等)、!(值与类型均不等)

宽松比较:==、!=、>、<、>=、<=

function compareStrict(a: string | number, b: string | number) : boolean{
return a === b;
}
let a: string | number = 10;
let b: string | number = ‘10’;
compareStrict(a, b); // false 类型不同

function compareLoose(a: string | number, b: string | number) : boolean{
return a == b;
}
let a: string | number = 10;
let b: string | number = ‘10’;
compareLoose(a, b); // true 字符串转为数字

算术运算符

一元运算符:+(正号)、-(负号)、++(自增)、–(自减)

二元运算符:+、-、*、/、%(取余)

let c = 10 + 5; // 15
let d = 10 - 5; // 5
let e = 3 * 4; // 12
let f = 10 / 4; // 2.5
let g = 10 % 3; // 1(余数)

运算符

形式

核心逻辑

执行代码(假定 count = 5)

等价的语句

执行后 count 的值

返回值(result 的值)

自增运算符(++)

后置自增

先取值后加一

result = count++;

result = count;count = count + 1;

6

5

自增运算符(++)

前置自增

先加一后取值

result = ++count;

count = count + 1;result = count;

6

6

自减运算符(–)

后置自减

先取值后减一

result = count–;

result = count;count = count - 1;

4

5

自减运算符(–)

前置自减

先减一后取值

result = --count;

count = count - 1;result = count;

4

4

逻辑运算符

&&(逻辑与):所有条件为真时返回 true

||(逻辑或):任一条件为真时返回 true

!(逻辑非): 布尔值取反

let a = false && true; // false(首个条件为 false 直接短路)
let b = true || false; // true(首个条件为 true 直接短路)
let c = !false; // true

逻辑与短路特性:若第一个条件为 false,直接跳过后续条件。

逻辑或短路特性:若第一个条件为 true,直接跳过后续条件。

位运算符

位运算是直接对整数的二进制位进行操作的运算方式。

基础运算符:&、|、^、~

位移运算符: <<、>>、>>>

按位与 &:两个操作数的对应二进制位均为 1 时结果为 1,否则为 0。

let a = 5; // 二进制 0101
let b = 3; // 二进制 0011
let c = a & b; // 二进制 0001

空安全

在实际开发中,当运算符操作的变量为空,即值为 null 或者 undefined 时极易引发运行时异常,影响应用的稳定性。为了避免这些程序因为空值而崩溃,ArkTS 专门引入了空安全机制,通过这个机制可以在编译阶段就可以发现潜在的空值问题并提前解决,让代码更靠谱、更稳定。

一般来说,有时会存在声明变量时不确定初始值。在这类情况下,通常使用联合类型包含 null 值或 undefined null 表示显式赋值的空值,常用于主动清空对象引用,undefined 表示变量未初始化或属性不存在。

let name: string | null = null;
console.log(name.length.toString()); // 名称可能是空值

使用时,不对可为 null 值的变量进行非空校验,那么在编译或者运行时就会发生错误,无法正确运行。

if/else

使用 if/else 进行判空。

if (name !== null) { /* do something */ }

?. 可选链

使用 ?. 可选链,如果是 null,运算符会返回 undefined。

function nullSafetyWithOptionalChaining(obj: Object | null): string | undefined {
return obj?.toString();
}

非空断言运算符

使用非空断言运算符,! 断言左边的值非空。

function nullSafetyWithAssertion(obj: Object | null): string {
// return obj.toString(); // obj可能为空.
// 编译通过,如果运行时obj的值非空,可以访问到obj的方法;如果运行时obj的值为空,则发生运行时异常
return obj!.toString();
}

空值合并运算符

使用空值合并运算符,?? 左边的值为 null 时会返回表达式右边的值。

let name: string | null = null;
const res = name ?? ’ ';

语句

语句可以控制程序的执行逻辑,保障程序稳定运行。具体包括 if、switch、循环、break、continue、throw、try 等语句。

条件语句

if 语句

if 语句基于不同的条件执行不同的动作,根据判断条件的执行结果(true 或者 false)来决定执行的代码块。

// 场景:进园前要检查有没有买票
let hasTicket: boolean = true;
if (hasTicket) {
console.log(‘检票通过!’);
} else {
console.log(‘禁止入园!’);
}

let hasTicket = true;
let result = hasTicket ? ‘检票通过!’ : ‘禁止入园!’;

条件表达式

除了 if-else 这种完整的条件语句,还可以使用更加简洁的条件表达式。

语法: condition ? expression1 : expression2

行为:如果 condition 为 true 就返回 expression1 的值,否则返回 expression2 的值。

let hasTicket = true;
let result = hasTicket ? ‘检票通过’ : ‘禁止入园’;

switch 语句

switch 语句根据一个表达式的不同值执行对应的代码块,特别适合多离散值匹配的场景。

switch (day) { case 1: console.log('星期一'); break; case 2: console.log('星期二'); break; case 3: console.log('星期三'); break; case 4: console.log('星期四'); break; case 5: console.log('星期五'); break; case 6: case 7: console.log('周末'); break; default: console.log('输入错误,请输入1-7之间的数字'); } 这里有一个重要的规则,每一个 case 语句的代码块结尾都要加上 break 关键字用于跳出 switch 结构。如果不加 break 就会出现穿透现象,代码会继续执行后面所有 case 的语句,直到遇到 break 或者 switch 语句结束。 循环语句 循环语句用于重复执行相同的一组语句,提高效率、简化代码。 let students: string[] = ['XiaoMing', 'XiaoZhang', 'XiaoWang', 'XiaoLi']; for 语句 for 语句会被重复执行,直到循环条件结果为 false。 for (let i = 0; i < students.length; i++) { console.log(students[i]); } for-of 语句 for-of 语句可以遍历数组等可以迭代的类型。 for (let student of students) { console.log(student); } while 语句 while 语句中的循环表达式是在执行循环体之前判断的。 let index = 0; while (index < students.length) { console.log(students[index]); index++; } do-while 语句 do-while 语句中的循环控制表达式是在执行循环体之后判断的。 let index = 0; do { console.log(students[index]); index++; } while (index < students.length) break 语句 用于立即终止当前循环(如 for、while、do-while),跳出循环体并执行后续代码。 // 输出 0 1 2 for (let i = 0; i < 5; i++) { if (i === 3) { break; // 当 i = 3 时退出循环 } console.log(i + ' '); } continue 语句 用于跳出当前循环迭代的剩余代码,直接进入下一次循环条件判断。 // 输出 0 1 2 4 for (let i = 0; i < 5; i++) { if (i === 3) { continue; // 跳过 i = 3 的迭代 } console.log(i + ' '); } 异常处理语句 throw 语句 异常处理是保障应用稳定运行的核心机制之一。当代码执行遇到错误时,可以通过 throw 关键字主动抛出异常,把错误信息明确地告诉程序。 function checkAge(age: number) { if (age < 0) { throw new Error('年龄不能为负数'); } } try 语句 抛出异常后,一定要处理异常,不然程序会因为未处理的异常而崩溃。处理异常用的是 try-catch-finally 这三个关键字:try 里面包裹可能抛出异常的代码块,如果 try 里面的代码真的出错了,就执行 catch 里面的代码来处理异常,finally 里面的代码不管有没有异常都会执行,通常用来释放资源。 try { let result = checkAge(-5); // 可能抛出异常的操作 } catch (error) { console.error('捕获到异常:', error.message); // 处理异常 } finally { console.log('清理操作'); // 无论是否异常都会执行 }
http://www.cnnetsun.cn/news/3582400.html

相关文章:

  • 链上 AI Agent 的民主化治理:模型升级的社区投票、参数修改的透明审计轨迹
  • TI Hercules安全MCU中CRC控制器与VIM中断管理器的实战配置与避坑指南
  • 工单系统对接CMDB,如何让故障排查提速
  • VMware下CentOS 7.9虚拟机环境搭建与优化指南
  • AI管理决策边界:从IBM历史警告到现代人机协作实践
  • Tiva™微控制器外设就绪与浮点异常处理机制详解
  • 计算机毕业设计之招聘网站系统的设计与实现
  • Unity 6 LTS断言失败(Assertion failed)根源分析与实战解决方案
  • 计算机毕业设计之证券交易管理系统
  • 嵌入式低功耗设计:时钟门控与电源门控寄存器实战解析
  • Kafka运维实战:集群部署、监控与性能调优指南
  • 下篇:回溯与剪枝的「智慧寻宝人」——DFS 进阶与网格 / 图论应用
  • 小程序毕业设计-基于 SpringBoot+Android 的个人健身计划管理系统的设计与实现 移动端智能健身训练计划定制 APP 设计(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 电商企业选型指南:多平台分账财税服务商
  • 计算机小程序毕设实战-基于SpringBoot的居家用药管理与健康提醒医务助手 基于前后端分离的家庭医务服务小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 2026答辩翻车重灾区!别再瞎做毕业PPT|Okbiye AI学术PPT才是正确打开方式[特殊字符]
  • 缺口100万+,这行严重缺人!有计算机底子的直接躺赢...
  • 2026论文双检必过攻略!Okbiye AI论文自查|查重+AI痕迹一键预检✅
  • GitHub今日热榜 | 2026-07-22:阿波罗 11 号制导计算机(AGC)的原始源代码上榜
  • 【存储中间件之 Ceph 进阶】文件存储/块存储/对象存储/项目实战部署
  • 《郑州考研机构如何用3个策略吸引职场考生》
  • 字节开源 DeerFlow 2.0:让 AI 不止于聊天
  • TM4C1294NCPDT I2C总线协议深度解析与驱动开发实战
  • 《心癌》动画技术解析:独立短片制作流程与渲染优化
  • Unity转盘抽奖开发指南:从数据驱动到流畅动画实现
  • 超8万家面包店关停,为啥大家不去面包店买面包了?
  • AI如何变革科研写作:文献管理与期刊匹配实战
  • Kafka+Zookeeper+MongoDB分布式数据管道部署指南
  • AI大模型算力瓶颈解析:从Kimi暂停会员看Token成本与优化策略
  • 无限流跑团平台技术实现:从规则引擎到实时通信系统