尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ArkTS 核心语法精讲:运算符、空安全与流程控制

ArkTS 核心语法精讲:运算符、空安全与流程控制
📅 发布时间:2026/8/4 7:47:34

引言

写出高效稳定的鸿蒙应用, ArkTS 的三个核心知识点非常重要:运算符、空安全机制和流程控制语句。运算符决定了数据的计算方式,空安全可以避免程序因空值崩溃,流程控制则让代码能够根据不同情况灵活执行逻辑。本节课将系统讲解这三部分内容,为后续鸿蒙应用开发筑牢基础。

核心内容

一、运算符分类

赋值运算符

赋值运算符分为基础赋值和复合赋值两类:

  • 基础赋值:使用=直接赋值,如a = 5。

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

复合赋值可以简化写法,例如a = a + 5可简写为a += 5,两者效果完全一致。

比较运算符

比较运算符用于比较两个值的相等性与大小,分为两类:

类型运算符特点
严格比较===、!==同时比较值和数据类型,两者均相等才返回true
宽松比较==、!=、>、<、>=、<=只比较数值,会自动转换数据类型

示例:

let a: number = 1; let b: string = "1"; console.log(a === b); // false(值和类型均相等才为 true) console.log(a == b); // true(自动类型转换后数值相等)

开发实战中推荐优先使用宽松比较==,可以避免类型转换带来的意外错误。

算术运算符

算术运算符用于对数字类型进行数学运算:

  • 一元运算符:正号+、负号-、自增++、自减--

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

自增/自减的位置规则:

写法规则
result = count++(后置)先赋值(result = count),后运算(count自增)
result = ++count(前置)先运算(count自增),后赋值(result = count)

示例:

let count: number = 5; let result1 = count++; // result1 = 5, count = 6 let result2 = ++count; // result2 = 7, count = 7

注意:程序中乘号使用*表示,取余使用%表示。

逻辑运算符

逻辑运算符用于布尔值的逻辑判断,返回布尔结果:

运算符名称规则
&&逻辑与所有条件为真时才返回true
||逻辑或任一条件为真时返回true
!逻辑非对布尔值取反

短路求值:逻辑与和逻辑或支持短路求值,即第一个条件已可确定结果时,不会执行第二个条件,提升运行效率。

false && anyExpression; // 直接返回 false,不执行 anyExpression true || anyExpression; // 直接返回 true,不执行 anyExpression
位运算符

位运算符直接对整数的二进制位进行操作,常用于性能优化和数据压缩场景:

  • 基础位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)

  • 位移运算符:<<(左移)、>>(算术右移)、>>>(逻辑右移)

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

二、空安全机制

空值基础概念

声明变量时若无法确定初始值,可将其声明为可空类型,允许保存null或undefined:

  • null:主动赋值的空值,常用于清空对象引用。

  • undefined:表示变量未初始化,或对象不存在该属性。

let name: string | null = null; // 显式空值 let age: number | undefined; // 未初始化

如果使用可空变量时不做非空检查,程序在编译或运行时将报错。ArkTS 提供了四种非空校验方法:

方法一:if/else判空

通过条件判断手动校验非空,只有变量不为空时才执行操作。

function checkName(name: string | null) { if (name !== null) { console.log(name); } }
方法二:可选链?.

如果调用对象为null,运算符会直接返回undefined,不会抛出错误。

function nullSafetyWithOptionalChaining(obj: Object | null): string | undefined { return obj?.toString(); }
方法三:非空断言!

断言运算符左侧的值一定非空,编译器允许通过编译。若运行时实际值为空,仍会抛出异常,使用时必须确保变量一定非空。

function nullSafetyWithAssertion(obj: Object | null): string { return obj!.toString(); // 必须确保 obj 不为 null }
方法四:空值合并??

如果运算符左侧值为null或undefined,则返回右侧的默认值;否则返回左侧的值。

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

空安全机制可在编译阶段提前发现空值问题,大幅提升应用稳定性,是开发中必须掌握的核心机制。

三、流程控制语句

条件语句

if/else语句:根据条件执行不同分支逻辑,也可使用三目条件表达式简化写法。

// if/else 写法 let hasTicket: boolean = true; if (hasTicket) { console.log('放行'); } else { console.log('禁止'); } // 三目表达式写法 let result = hasTicket ? '放行' : '禁止';

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语句,否则匹配成功后会继续执行后续所有case,引发逻辑错误。

循环语句

ArkTS 支持四种循环形式,均可用于遍历数组元素:

1.for语句:通过索引遍历。

let students: string[] = ['XiaoMing', 'XiaoZhang', 'XiaoWang', 'XiaoLi']; for (let i = 0; i < students.length; i++) { console.log(students[i]); }

2.for-of语句:直接遍历可迭代对象,无需操作索引。

for (let student of students) { console.log(student); }

3.while语句:循环条件在执行循环体之前判断。

let index = 0; while (index < students.length) { console.log(students[index]); index++; }

4.do-while语句:循环条件在执行循环体之后判断,循环体至少执行一次。

let index = 0; do { console.log(students[index]); index++; } while (index < students.length);
循环控制语句

break语句:立即终止当前整个循环,跳出循环体。

// 输出 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 + ' '); }

break跳出整个循环,continue只跳过本次迭代,二者作用完全不同,不可混淆。

异常处理语句

throw语句:手动主动抛出异常,传递错误信息。

function checkAge(age: number) { if (age < 0) { throw new Error('年龄不能为负数'); } }

try-catch-finally语句:

  • try:包裹可能出错的代码。

  • catch:捕获并处理异常。

  • finally:无论是否发生异常都会执行,通常用于释放资源(关闭文件、断开网络等)。

try { checkAge(-5); } catch (error) { console.log('捕获到异常:' + error.message); } finally { console.log('资源释放'); }

总结

本节课系统讲解了 ArkTS 的三个核心知识点:

  1. 运算符:赋值运算符(基础赋值与复合赋值)、比较运算符(严格比较===与宽松比较==的区别)、算术运算符(重点:自增/自减的位置规则)、逻辑运算符(重点:短路求值机制)、位运算符(按位与、位移等)。

  2. 空安全机制:null与undefined的区别,四种非空校验方法——if/else判空、可选链?.、非空断言!、空值合并??。

  3. 流程控制语句:if/else与switch条件语句(switch需添加break)、for/for-of/while/do-while四种循环形式、break与continue的控制区别、throw与try-catch-finally异常处理机制。

相关新闻

  • Unity内存碎片化诊断与优化:从原理到实践的全面解决方案
  • 自动驾驶迎来“第二春“:物理 AI 与端到端大模型重塑行业
  • RabbitMQ常见知识点总结

最新新闻

  • 京东自动下单助手:高效抢购与库存监控解决方案
  • CTF竞赛入门指南:从零构建网络安全实战技能
  • SpringBoot微服务架构在全域旅游系统中的应用实践
  • 大语言模型提示词工程实战:单提示词生成结构化游戏框架
  • 2026沈阳无票老金出手体验 易奢福按实际纯度正常估价当场秒打款 - 易奢福
  • DownGit:GitHub资源精准下载的技术架构与创新应用

日新闻

  • 5分钟快速搭建智能数字人:Live2D虚拟形象终极部署指南
  • 告别繁简字幕转换烦恼:这款开源工具让你一键搞定影视字幕处理 [特殊字符]
  • GPT-5.4传闻背后:大模型永久记忆与极限推理的技术演进与挑战

周新闻

  • 怀化母婴除甲醛公司测甲醛中心怎么选:康之居母婴除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • 三步打造你的终极音乐中心:foobox-cn网络电台功能完整指南
  • Lance湖仓格式:为多模态AI工作流设计的终极数据存储方案

月新闻

  • ClickHouse版本管理深度实战:4步构建零风险升级与回滚体系
  • Java 23 种设计模式:从踩坑到精通 | 番外:责任链模式 —— 物流审批流程实战
  • 华硕笔记本性能解放指南:G-Helper轻量级控制工具全面解析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号