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

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、循环语句(for)
    • 5.3、while 语句
    • 5.4、throw 和 try 语句
    • 5.5、switch 语句
  • 代码部分

1、ArkTS语言特点

参考文档:ArkTS语言介绍

1.1、对象字面量必须标注类型

为了清晰展示 ArkTS(ETS)与 TypeScript(TS)之间的差异,我分别创建了两个文件进行演示。

在两个文件中均输入如下代码:

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类型仅有两个逻辑值:truefalse,通常用于条件判断语句中。

2.3、string 类型

string类型表示字符序列,支持使用转义字符。字符串字面量可以用单引号(')、双引号(")或反引号(`)定义。其中,反引号用于定义模板字符串,支持嵌入表达式。

示例代码如下:

@Entry@Componentstruct Index{build(){Column(){Button('数字类型').onClick(()=>{letn1=3.14;letn2=3.141592;letn3=0.5;letn4=1e2;console.log('数字类型',n1);console.log('数字类型',n2);console.log('数字类型',n3);console.log('数字类型',n4);})Button('布尔类型').onClick(()=>{letisFDone:boolean=false;letisTDone:boolean=true;console.log('布尔类型',isFDone);console.log('布尔类型',isTDone);})Button('字符串类型').onClick(()=>{lets1='Hello, world!\n';lets2='this is a string';leta='Success';lets3=`The 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、循环语句(for)

5.3、while 语句

5.4、throw 和 try 语句

5.5、switch 语句


代码部分

@Entry@Componentstruct 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('算数运算符:加法',a+b); 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('大于',a>b); console.log('小于',a<b); console.log('等于',a==b); console.log('不等于',a!=b); console.log('大于等于',a>=b); console.log('小于等于',a<=b); }) // 逻辑运算符 Button('逻辑运算符').onClick(()=>{ let a = 10 let b = 20 console.log('逻辑与',a>5 && b>10); console.log('逻辑或',a>5 || b>10); console.log('逻辑非',!(a>5)); }) // 位运算符 Button('位运算符').onClick(()=>{ let a = 10 let b = 20 console.log('按位与',a&b); console.log('按位或',a|b); console.log('按位异或',a^b); console.log('按位取反',~a); console.log('左移',a<<1); console.log('右移',a>>1); }) */// 语句/* 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',}
http://www.jsqmd.com/news/359375/

相关文章:

  • 计算机字符编码
  • 量子AI在图像识别中的应用实战
  • Detached HEAD 状态详解
  • 必看!必看!提示工程架构师的多智能体系统提示协同机制指南
  • C语言编译与链接全流程:从源码到可执行程序的幕后之旅
  • [大模型实战 06] 我的模型我做主:在 Kaggle 上用 Unsloth 极速微调 Qwen3
  • 67.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--分摊功能总体设计与业务流程
  • PostgreSQL UPDATE 语句详解
  • Qt 技巧笔记(七) QLineEdit 单行输入控件
  • 【Linux进阶篇】Shell环境变量入门:全局vs局部分不清?一篇吃透配置逻辑
  • AI架构师踩过的7个数据 pipeline 坑,看完少花1个月时间!
  • Shell printf命令详解
  • 基于stm32的河流检测系统
  • 【课程设计/毕业设计】基于springboot的学生宿舍管理学生信息管理、宿舍安排、报修处理基于SpringBoot智慧学生校舍系统设计与实现【附源码、数据库、万字文档】
  • 深入解析:数据中台工作流编排引擎:Apache Airflow
  • 解密Copilot:如何打造高效的AI原生应用
  • 听《卡农》有感 - Wiki
  • 【YOLOv12多模态创新改进】独家创新改进首发| SCI一区Top 2025 | 引入CIMFusion 跨模态交互特征融合模块,增强可见光和红外图像之间的特征交互,含多种创新改进,顶会顶刊发文热点
  • 洛谷P10463-区间加区间GCD-学习笔记
  • 【YOLOv13多模态创新改进】独家创新改进首发| SCI一区Top 2025 | 引入CIMFusion 跨模态交互特征融合模块,增强可见光和红外图像之间的特征交互,含多种创新改进,顶会顶刊发文热点
  • 多维表+AI:解决8000户燃气抄表难题
  • cximage库
  • Spark面试题笔记
  • Java毕设项目推荐-基于springboot的学生宿舍管理系统的设计与实现宿舍资源管理、学生入住、费用管理、设备报修、访客登记【附源码+文档,调试定制服务】
  • Java毕设选题推荐:基于SpringBoot智慧学生校舍系统设计与实现基于springboot的学生宿舍管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 悦读 1.11.0 | 有情感的AI电子书朗读,多国语言,支持多格式
  • 【毕业设计】基于springboot的学生宿舍管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 多邻国内置猫头鹰助手 6.64.4-china | 全球最热门外语学习APP,解锁关卡与无限时间
  • Burp Suite MCP + Gemini CLI:利用模型上下文协议将Burp Suite与Gemini CLI连接,加速授权测试中的侦察、分析与报告
  • ImportError: cannot import name ‘HfFolder‘ from ‘huggingface_hub‘