ArkTS 基础语法入门:变量声明与数据类型全解析
引言
ArkTS 是专门用于 HarmonyOS 应用开发的高级语言。在正式进入鸿蒙应用开发之前,掌握 ArkTS 的基础语法是必要的前提。本节课将从零基础出发,系统讲解 ArkTS 中变量与常量的声明规则、数据类型体系,以及类型安全、类型推断等核心概念,为后续鸿蒙应用开发打下基础。
核心内容
ArkTS 语言基础定位
ArkTS 是基于 TypeScript(简称 TS)扩展升级而来的高级语言,保留了 TS 的基础语法与风格,并新增了两大核心能力:
静态类型检查:在编写代码时及时发现错误。
自动类型推断:简化代码书写。
ArkTS 支持与 TS/JavaScript 高效互操作,可以完全复用现有的 TS/JS 生态,之前用 TS/JS 开发的代码和工具无需重写,可直接复用。
ArkTS 发展历程
| 阶段 | 关键特性 |
|---|---|
| API 9 版本 | 开始支持声明式 UI 范式,提供声明式 UI 描述、状态管理、渲染控制等 UI 开发能力 |
| API 10-12 版本 | 新增静态类型检查、并发能力增强、空值安全等机制,进一步强化静态检查分析能力,优化并发编程 API |
| 未来演进方向 | 将持续迭代,逐步增加并发能力增强、系统类型增强、分布式开发范式等更多现代语言特性 |
变量与常量声明
在 ArkTS 中,变量是存储可变数据的"容器",常量是存储不可变数据的"容器"。
声明语法
变量声明:使用let关键字
let count: number = 0;常量声明:使用const关键字
const MAX_COUNT: number = 100;变量与常量的核心区别
| 特性 | 变量(let声明) | 常量(const声明) |
|---|---|---|
| 可变性 | 可多次赋值 | 声明后仅能赋值一次,不可修改 |
| 声明关键字 | let | const |
| 命名规范 | 推荐小驼峰命名(如userName) | 推荐全大写 + 下划线分隔(如MAX_VALUE) |
| 性能优化 | 运行时动态赋值 | 编译时求值,减少运行时计算开销 |
示例:
let count: number = 0; count = 40; // 允许重新赋值 const MAX_COUNT: number = 100; MAX_COUNT = 10; // 编译报错:无法给常量重新赋值ArkTS 数据类型体系
ArkTS 的数据类型整体分为基本类型和引用类型两大类,另有拓展类型用于特殊场景。
常用基本类型
| 类型 | 用途 | 示例 |
|---|---|---|
string | 存储文字信息(如商品标题、用户名) | 'Pura 80' |
number | 存储数字信息,包括整数和小数(如商品价格、年龄) | 4894 |
boolean | 存储状态信息,仅true和false | true |
使用示例:
// 声明不同类型的变量 let title: string = 'Pura 80'; let price: number = 4894; let isChoose: boolean = true; // 控制台打印输出 console.log(title); // 输出: Pura 80 console.log(price.toString()); // 输出: 4894 // 模板字符串语法拼接变量 console.log(`The price of ${title} is ${price}`); // 输出: The price of Pura 80 is 4894模板字符串说明:使用反引号(ESC 键下方的按键)包裹文本,插入变量使用
${变量名}格式。
引用类型
引用类型不直接存储数据本身,而是在内存中存储数据的内存地址,通过引用访问实际数据,适合存储有层级或关联关系的复杂结构。
常用引用类型包括:Object、Array、Enum、Class、Function等。
Object 类型:通用类型,可以容纳任意类型的数据,自带通用方法(如toString())。
let obj: Object = { name: 'Pura 80', price: 4894 }; console.log(obj.toString());注意:由于
Object类型过于宽泛,编辑器无法做针对性类型检查,容易隐藏运行时错误,开发中应尽量少用,优先使用具体类型。
Array 类型:用于存储多个同类型数据,提供长度查询、增删元素等操作。
// 创建存储字符串的数组 let students: string[] = ['XiaoMing', 'XiaoZhang', 'XiaoWang', 'XiaoLi']; console.log(students.length); // 打印数组长度: 4 console.log(students[0]); // 打印索引为0的元素: XiaoMing students.push('XiaoHong'); // 添加元素 → 长度变为5 students.pop(); // 删除末尾元素 → 长度变为4基本类型与引用类型的核心区别
| 类型 | 存储方式 | 赋值行为 |
|---|---|---|
| 基本类型 | 直接存储数据值 | 赋值时创建值的独立副本,修改新变量不影响原变量(值复制) |
| 引用类型 | 存储数据的内存地址 | 赋值时复制内存地址,多个变量指向同一块内存,修改会影响所有指向该地址的变量(地址复制) |
示例对比:
// 基本类型 —— 值复制 let a: number = 10; let b: number = a; // b 得到 a 的独立副本 b = 20; // 修改 b,a 仍为 10 // 引用类型 —— 地址复制 let arr1: number[] = [1, 2]; let arr2: number[] = arr1; // arr2 与 arr1 指向同一个数组 arr2.push(3); // arr1 也变为 [1, 2, 3]这是笔试和面试的高频考点,必须理解值复制和地址复制的不同效果。
拓展数据类型
枚举类型(Enum)
枚举类型是预先定义好的一组可选命名值,限制变量只能从预设选项中选择,避免非法值。
// 声明 Color 枚举类型,预设三个可选值 enum Color { Red, Blue, Green } // 只能从预设值中选择 let fontColor: Color = Color.Red;联合类型
用于一个变量可能支持多种类型的场景,允许变量被赋值为多种指定类型中的任意一种。
let value: string | number; value = 'Hello'; // 合法 value = 42; // 合法 value = true; // 编译报错类型别名
可以给已存在的类型起一个简洁易记的新名称,简化复杂类型的重复书写。
type ID = string | number; let userId: ID = 'abc123'; let productId: ID = 456;类型安全
ArkTS 是静态类型安全语言,赋值类型不匹配时编译器会直接报错,提前发现问题,避免运行时出错。
let title: string = 'Pura 80'; title = 20; // 编译报错:类型不匹配自动类型推导
声明变量并直接赋值时,即使不手动标注类型,编译器也会根据赋值内容自动推导变量类型。
// 未手动标注类型,编译器自动推导 meaningOfLife 为 number 类型 let meaningOfLife = 42;类型断言
当开发者能通过逻辑确定变量的具体类型,但编译器无法自动判断时,可以使用类型断言明确告诉编译器变量的具体类型。
// 使用 as 关键字进行类型断言 let someObj: object = 'Hello World'; let value: string = someObj as string;注意:如果开发者类型判断错误,会导致运行时错误。只有明确类型时才可以使用类型断言。
总结
本节课系统介绍了 ArkTS 的基础语法:
ArkTS 语言定位:基于 TypeScript 扩展,新增静态类型检查和自动类型推断,兼容 TS/JS 生态。
变量与常量声明:使用
let声明变量(可修改),使用const声明常量(不可修改)。常量推荐全大写 + 下划线命名。数据类型体系:分为基本类型(
string、number、boolean)和引用类型(Object、Array、Enum等)。基本类型为值复制,引用类型为地址复制。拓展特性:包括枚举类型、联合类型、类型别名、类型安全、自动类型推导和类型断言。