HarmonyOS应用开发实战(基础篇)Day01-《ArkTS基本知识》
ArkTS基本知识1、ArkTS语言特点1.1、对象字面量必须标注类型1.2、不支持 Structural Typing结构化类型2、ArkTS基本数据类型2.1、number 类型2.2、boolean 类型2.3、string 类型3、高级数据类型3.1、枚举类型3.2、联合类型3.3、数组类型4、运算符4.1、赋值运算符4.2、比较运算符4.3、位运算符4.4、逻辑运算符4.5、算术运算符5、语句5.1、条件语句5.2、循环语句for5.3、while 语句5.4、throw 和 try 语句5.5、switch 语句代码部分1、ArkTS语言特点参考文档ArkTS语言介绍1.1、对象字面量必须标注类型为了清晰展示 ArkTSETS与 TypeScriptTS之间的差异我分别创建了两个文件进行演示。在两个文件中均输入如下代码conststu{name:zhangsan,age:19}可以看到在 ArkTS 中出现了报错提示需要显式声明类型而在 TypeScript 中相同代码则不会报错因此在 ArkTS 中必须为对象字面量显式声明类型例如1.2、不支持 Structural Typing结构化类型我们再通过一段代码来验证这一点interfaceAni{name:string,age:number,}functiongetName(obj:Ani){returnobj.name;}constani{name:zhangsan,age:18,gender:男};getName(ani);在 TypeScript 中即使传入的对象包含额外属性如gender只要满足接口定义的必要字段就不会报错但在 ArkTS 中同样的代码会报错这是因为 ArkTS 不支持 structural typing鸭子类型要求对象的类型必须严格匹配。因此我们需要将接口扩展以包含所有实际使用的属性此处为了避免命名冲突已将接口名改为大写2、ArkTS基本数据类型2.1、number 类型2.2、boolean 类型boolean类型仅有两个逻辑值true和false通常用于条件判断语句中。2.3、string 类型string类型表示字符序列支持使用转义字符。字符串字面量可以用单引号、双引号或反引号定义。其中反引号用于定义模板字符串支持嵌入表达式。示例代码如下EntryComponentstruct Index{build(){Column(){Button(数字类型).onClick((){letn13.14;letn23.141592;letn30.5;letn41e2;console.log(数字类型,n1);console.log(数字类型,n2);console.log(数字类型,n3);console.log(数字类型,n4);})Button(布尔类型).onClick((){letisFDone:booleanfalse;letisTDone:booleantrue;console.log(布尔类型,isFDone);console.log(布尔类型,isTDone);})Button(字符串类型).onClick((){lets1Hello, world!\n;lets2this is a string;letaSuccess;lets3The result is${a};console.log(字符串类型,s1);console.log(字符串类型,s2);console.log(字符串类型,a);console.log(字符串类型,s3);})}}}3、高级数据类型3.1、枚举类型enum枚举是一种预先定义的一组命名常量的值类型。使用枚举常量时必须以枚举类型的名称作为前缀。3.2、联合类型联合类型允许一个变量拥有多种可能的类型使用|分隔不同类型。3.3、数组类型数组是由若干个符合指定元素类型的值组成的集合。可通过数组字面量用方括号[]包裹进行初始化。数组索引从 0 开始长度由元素数量决定。4、运算符4.1、赋值运算符基础赋值运算符为用于将右侧的值赋给左侧变量。复合赋值运算符将运算与赋值结合例如a b等价于a a b。支持的复合赋值运算符包括、-、*、/、%、、、、、|、^。4.2、比较运算符4.3、位运算符4.4、逻辑运算符4.5、算术运算符5、语句5.1、条件语句5.2、循环语句for5.3、while 语句5.4、throw 和 try 语句5.5、switch 语句代码部分EntryComponentstruct Index{build(){Column(){// 数据类型/* Button(数字类型).onClick((){ let n1 3.14; let n2 3.141592; let n3 0.5; let n4 1e2; console.log(数字类型,n1); console.log(数字类型,n2); console.log(数字类型,n3); console.log(数字类型,n4); }) Button(布尔类型).onClick((){ let isFDone: boolean false; let isTDone: boolean true; console.log(布尔类型,isFDone); console.log(布尔类型,isTDone); }) Button(字符串类型).onClick((){ let s1 Hello, world!\n; let s2 this is a string; let a Success; let s3 The result is ${a}; console.log(字符串类型,s1) console.log(字符串类型,s2) console.log(字符串类型,a) console.log(字符串类型,s3) }) Button(枚举类型).onClick((){ let grade Grade.优 if (grade A) { console.log(枚举类型优); }else { console.log(枚举类型错误); } }) Button(联合类型).onClick((){ let GradeAll : string | number | null 1; console.log(联合类型,GradeAll) GradeAll null; console.log(联合类型,GradeAll) GradeAll A; console.log(联合类型,GradeAll) }) Button(数组类型).onClick((){ // 数组定义 let arr:string[] [1,2,3,4] let arr2: number[] new Array(10) // 下标 console.log(数组类型,arr[3]); // 支持动态扩容 arr2[100]100 console.log(数组类型,arr2.length); }) */// 运算符/* // 赋值运算符 Button(赋值运算符).onClick((){ let a:number 10 let b:number 20 let c:number 30 console.log(赋值运算符,a,b,c); }) // 算数运算符 Button(算数运算符).onClick((){ let a 10 let b 20 console.log(算数运算符加法,ab); console.log(算数运算符减法,a-b); console.log(算数运算符乘法,a*b); console.log(算数运算符除法,a/b); console.log(算数运算符取余,a%b); console.log(算数运算符自增,a); console.log(算数运算符自减,a--); }) // 比较运算符 Button(比较运算符).onClick((){ let a 10 let b 20 console.log(大于,ab); console.log(小于,ab); console.log(等于,ab); console.log(不等于,a!b); console.log(大于等于,ab); console.log(小于等于,ab); }) // 逻辑运算符 Button(逻辑运算符).onClick((){ let a 10 let b 20 console.log(逻辑与,a5 b10); console.log(逻辑或,a5 || b10); console.log(逻辑非,!(a5)); }) // 位运算符 Button(位运算符).onClick((){ let a 10 let b 20 console.log(按位与,ab); console.log(按位或,a|b); console.log(按位异或,a^b); console.log(按位取反,~a); console.log(左移,a1); console.log(右移,a1); }) */// 语句/* Button(条件语句).onClick((){ let grade Grade.优 if (grade A) { console.log(枚举类型优); }else { console.log(枚举类型错误); } }) // 循环 Button(循环语句).onClick((){ for (let i 0; i 10; i) { console.log(循环语句,i); } }) // while循环 Button(while循环).onClick((){ let i 0 while (i 10) { console.log(while循环,i); i } }) //throw和try语句 Button(throw和try语句).onClick((){ try { throw new Error(throw和try语句); }catch (e){ console.log(e.message); } }) //switch语句 Button(switch语句).onClick((){ let grade A switch (grade) { case A: console.log(switch语句优); break; case B: console.log(switch语句良); break; case C: console.log(switch语句中); break; case D: console.log(switch语句差); break; } }) */}}}enumGrade{优A,良B,中C,差D,}

相关新闻

技术的便利,从来都不属于开发者

技术的便利,从来都不属于开发者

技术的便利,从来都不属于开发者 我们总被灌输一个共识:技术的发展是为了让人类更轻松。打开手机就能完成支付,点击鼠标就能部署应用,滑动屏幕就能连接世界——这些触手可及的便利,让每个人都能感受到技术迭代的温度。但…

2026/5/17 3:29:15 阅读更多 →
Vue.js 事件处理器

Vue.js 事件处理器

Vue.js 事件处理器 引言 在Web开发中,事件处理器是前端开发中非常重要的一部分。Vue.js作为一款流行的前端框架,提供了丰富的内置事件处理机制,使得开发者可以更加方便地处理用户交互。本文将详细介绍Vue.js的事件处理器,包括事件绑定、事件修饰符、自定义事件等内容。 …

2026/5/17 3:29:15 阅读更多 →
Detached HEAD 状态详解

Detached HEAD 状态详解

什么是 Detached HEAD 基本定义 Detached HEAD(分离头指针) 是Git的一种特殊状态,指HEAD直接指向某个commit,而不是指向某个分支。 形象比喻 正常状态:有安全绳的登山 你(HEAD)↓ 安全绳&#x…

2026/7/5 22:50:22 阅读更多 →

最新新闻

Spark MLlib ALS 参数调优指南:5组超参数对比与RMSE优化实践

Spark MLlib ALS 参数调优指南:5组超参数对比与RMSE优化实践

Spark MLlib ALS 参数调优实战:从网格搜索到RMSE优化的完整指南1. 理解ALS算法的核心参数协同过滤推荐系统中,交替最小二乘法(ALS)是最常用的矩阵分解技术之一。要充分发挥其性能,必须深入理解以下三个关键参数&#x…

2026/7/6 1:35:37 阅读更多 →
PointPillars vs VoxelNet vs SECOND:3种点云编码器在RTX 4090上的速度与精度对比

PointPillars vs VoxelNet vs SECOND:3种点云编码器在RTX 4090上的速度与精度对比

PointPillars、VoxelNet与SECOND:RTX 4090平台下的三维点云检测架构深度评测当自动驾驶系统以120公里时速行驶时,每100毫秒的延迟意味着3.3米的盲区距离。这正是三维点云检测算法需要解决的现实挑战——如何在保证精度的前提下实现实时处理。本文将基于N…

2026/7/6 1:35:37 阅读更多 →
如何快速部署euler-copilot-vectorize-agent?5分钟入门教程

如何快速部署euler-copilot-vectorize-agent?5分钟入门教程

如何快速部署euler-copilot-vectorize-agent?5分钟入门教程 【免费下载链接】euler-copilot-vectorize-agent A microservice for data vectorization. 项目地址: https://gitcode.com/openeuler/euler-copilot-vectorize-agent 前往项目官网免费下载&#x…

2026/7/6 1:33:36 阅读更多 →
QGC V5.0 gstreamer视频流在安卓端画面卡顿、冻结,硬件解码失败的问题解决方案

QGC V5.0 gstreamer视频流在安卓端画面卡顿、冻结,硬件解码失败的问题解决方案

主要原因1.低端设备CPU软件解码性能不足2.硬件解码着色器未嵌入,导致硬件解码失败回退软解3.gstreamer的gl上下文丢失导致画面冻结解决方法一、启用硬件解码我使用的gstreamer版本是1.26.2,直接更改findgstreamer中的版本似乎会报错。硬件解码器&#xf…

2026/7/6 1:33:36 阅读更多 →
2026最新2款AI编程工具平替之选深度实测

2026最新2款AI编程工具平替之选深度实测

上周花了整周时间,我把 5 款 AI 编程工具分别用在 5 个不同模块上——一个工具一个模块,看最终代码质量差异。我当时选的模块里就包含了Node.js Express的用户行程文件上传功能,测试过程里我全程用vibe coding的方式,只靠口述需求…

2026/7/6 1:31:36 阅读更多 →
Halcon 标定板像素当量标定:单图法 vs 多图法,3种场景精度对比实测

Halcon 标定板像素当量标定:单图法 vs 多图法,3种场景精度对比实测

Halcon 标定板像素当量标定:单图法 vs 多图法,3种场景精度对比实测在工业视觉测量领域,像素当量标定的精度直接影响着整个系统的测量准确性。面对产线节拍和精度的双重需求,工程师们常常需要在单图快速标定与多图高精度标定之间做…

2026/7/6 1:29:36 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻