尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ArkTS 核心语法精讲:运算符、空安全与流程控制
引言写出高效稳定的鸿蒙应用 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或undefinednull主动赋值的空值常用于清空对象引用。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; // i3 时退出循环 } console.log(i ); }continue语句跳过当前循环迭代的剩余代码直接进入下一次循环条件判断。// 输出 0 1 2 4 for (let i 0; i 5; i) { if (i 3) { continue; // 跳过 i3 的迭代 } 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 的三个核心知识点运算符赋值运算符基础赋值与复合赋值、比较运算符严格比较与宽松比较的区别、算术运算符重点自增/自减的位置规则、逻辑运算符重点短路求值机制、位运算符按位与、位移等。空安全机制null与undefined的区别四种非空校验方法——if/else判空、可选链?.、非空断言!、空值合并??。流程控制语句if/else与switch条件语句switch需添加break、for/for-of/while/do-while四种循环形式、break与continue的控制区别、throw与try-catch-finally异常处理机制。
RELATED

相关推荐

视频标题优化全攻略:从算法原理到爆款公式,提升B站抖音流量

视频标题优化全攻略:从算法原理到爆款公式,提升B站抖音流量

在B站、抖音等视频平台创作内容时,一个精心设计的标题往往是吸引用户点击、提升视频曝光率的第一步。很多创作者,尤其是技术、数码、教程类UP主,常常面临这样的困境:内容干货满满,但标题要么过于平淡缺乏吸引力&#x…

📅 2026/10/11 15:12:08
嵌入式DMA实战:从32位DMA控制器配置到串口数据传输优化

嵌入式DMA实战:从32位DMA控制器配置到串口数据传输优化

在实际嵌入式开发、音视频处理或高性能数据传输场景中,直接内存访问(DMA)是提升系统效率、降低CPU负载的核心技术。当项目文档或芯片手册中出现类似“32 DMA 32DMA-17”这样的标识时,它通常指向一个具体的DMA控制器型号、通道配置…

📅 2026/10/11 15:10:46
光学系统像质评价:从MTF、点扩散函数到工程实战

光学系统像质评价:从MTF、点扩散函数到工程实战

1. 从“看得见”到“看得清”:像质评价的工程意义在光学设计的圈子里,我们常说“设计是画饼,评价是烙饼”。一个光学系统,从初始结构到最终产品,中间隔着千山万水。你可以在软件里把点列图、MTF曲线优化得天花乱坠&…

📅 2026/9/11 10:38:26
MORE NEWS

更多资讯

📰

进程的优雅退场:fork、exit与僵尸进程全解析

做Linux开发这些年,绕不开的一个话题就是进程管理。而进程管理里最容易被忽略、却又最影响系统稳定性的,往往不是进程怎么“出生”,而是进程怎么“退场”。很多人用fork用得顺手,但一遇到僵尸进程、孤儿进程、退出码对不上这类问题…

📰

emulate架构深度解析:一个核心Store加插件系统如何撑起14个高保真API模拟器

【免费下载链接】emulate Local API emulation for CI and no-network sandboxes 项目地址: https://gitcode.com/gh_mirrors/emul/emulate 点击查看 免费下载 emulate 是一款面向 CI 和无网络沙箱的本地 API 模拟(API Emulation)工具&#…

📰

Python汽车销售数据可视化与预测实战:从CSV到LSTM模型

简介:这份资源面向具备一定Python基础的数据分析与可视化学习者,围绕汽车销售数据提供从获取、清洗到可视化与预测的完整实战案例,可用于课程设计、数据分析练手或时间序列预测入门。压缩包共23个文件,约3.98MB,包含1个…

📰

速度距离欺骗干扰仿真:MATLAB从信号模型到CFAR检测与跟踪验证

简介:这份资源面向雷达电子战、信号处理方向的学习者与研究人员,聚焦速度与距离欺骗干扰的MATLAB实现,帮助理解如何通过虚假多普勒频移与回波时延模拟假目标,从而误导敌方雷达对目标位置和速度的判断。压缩包共4个文件&#xff0c…

📰

用Rust match与模式匹配化简if-else:从入门到工程实践

前阵子帮一个团队做代码评审,读到一段连着六层缩进的 if-else。逻辑本身没写错,但当我读到第三层的时候,已经忘了外层兜的是什么条件。这种代码放在 Rust 工程里尤其刺眼——明明有模式匹配(match)这样顺手的武器&…

📰

无人机视角航拍古建筑屋顶缺陷损毁识别分割数据集labelme格式605张7类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数):605标注数量(json文件个数):605标注类别数:7标注类别名称:["mucaiwailu","taxiankongdong",&quo…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬