3. ArkTS语言基础(上):认识ArkTS语言,掌握基本数据类型

各位同学,咱们今天聊聊ArkTS。说实话,我第一次接触ArkTS的时候,心里也在嘀咕:这不就是TypeScript换了个马甲吗?但真正用起来才发现,鸿蒙团队在背后做了不少优化。咱们今天先把最基础的东西吃透,后面写代码才能顺手。

3.1 ArkTS到底是什么?

ArkTS是鸿蒙应用开发的首选语言。它基于TypeScript,但做了精简和增强。我个人的理解是:它保留了TypeScript的类型安全,又去掉了那些容易让人踩坑的灵活特性

举个例子,TypeScript里你可以用any类型到处糊,但ArkTS直接把这个类型砍掉了。为什么?因为鸿蒙团队希望你在编译阶段就把类型问题解决掉,别等到运行时才崩溃。我在项目中遇到过好几次,就是因为类型不匹配导致UI渲染异常,排查起来特别痛苦。

核心要点:ArkTS = TypeScript的严格子集 + 鸿蒙UI框架的深度绑定。你写ArkTS,本质上就是在写一种更安全的TypeScript。

3.2 基本数据类型:string, number, boolean

这三种类型是咱们写代码的"砖块"。别看简单,用不好照样出问题。

3.2.1 string(字符串)

字符串就是文本。ArkTS里用双引号或单引号都行,我个人习惯用双引号,因为跟HTML属性写法一致,不容易混淆。

let appName: string = "鸿蒙计算器";
let version: string = '1.0.0';
let description: string = `当前版本:${version}`;  // 模板字符串,支持变量嵌入

这里有个坑:模板字符串(反引号)在ArkTS里完全支持。我刚开始用的时候还担心不支持,结果发现鸿蒙团队把ES6的这套语法保留得很好。

3.2.2 number(数字)

ArkTS里的数字只有一种类型——number,不分整数和浮点数。这点跟JavaScript一样。

let count: number = 42;
let price: number = 19.99;
let hexValue: number = 0xFF;  // 十六进制,255

嗯,这里要注意:ArkTS不支持位运算。如果你以前写C++或者Java,习惯用位运算做标志位,那在ArkTS里得换个思路。我曾经把一个位运算的算法直接搬过来,结果编译报错,查了半天文档才发现这个限制。

3.2.3 boolean(布尔值)

布尔值就两个:truefalse。简单吧?但实际开发中,条件判断的坑往往出在这里。

let isLoggedIn: boolean = false;
let hasPermission: boolean = true;

// 错误写法(ArkTS不允许)
if (isLoggedIn) {  // 这样写没问题,但下面这样不行
  // ...
}

// 正确写法
if (isLoggedIn === true) {
  // ...
}

避坑指南:我曾经在条件判断里直接写 if (userCount),以为0会自动转成false。但在ArkTS里,这种隐式转换是不允许的。你必须显式写成 if (userCount !== 0)。记住:ArkTS不搞"真值"和"假值"那一套

3.3 变量声明:let 和 const

ArkTS里声明变量只有两种方式:letconst。没有var,这点跟现代TypeScript保持一致。

3.3.1 let:可变变量

let声明的变量,值可以改。但要注意作用域——它只在当前代码块内有效。

let score: number = 0;
score = 100;  // 可以重新赋值

if (true) {
  let score: number = 50;  // 这里的score是新的变量,跟外面的没关系
  console.log(score);  // 输出50
}
console.log(score);  // 输出100

我个人建议:能用const就别用let。为什么?因为const能帮你减少很多"变量被意外修改"的bug。我在项目中见过太多因为变量被不小心改了值,导致UI显示异常的情况。

3.3.2 const:常量

const声明的变量,一旦赋值就不能再改。注意,是"不能重新赋值",但如果存的是对象,对象的属性还是可以改的。

const MAX_COUNT: number = 100;
const APP_NAME: string = "我的应用";

// 下面这行会报错
// MAX_COUNT = 200;

// 对象常量
const user = { name: "张三", age: 25 };
user.age = 26;  // 允许,因为改的是属性,不是重新赋值
// user = { name: "李四" };  // 报错,不能重新赋值

小技巧:命名常量时,我习惯用全大写加下划线,比如 MAX_RETRY_COUNT。这样一眼就能看出这是个常量,不会手滑去修改它。

3.4 条件与循环语句

这部分跟大多数语言差不多,但ArkTS有一些细节需要注意。

3.4.1 if-else 条件判断

写法跟JavaScript完全一样。但记住我刚才说的:条件表达式必须是布尔类型

let age: number = 18;

if (age >= 18) {
  console.log("成年人");
} else if (age >= 6) {
  console.log("未成年人");
} else {
  console.log("儿童");
}

你想想看,如果写成 if (age),ArkTS会直接报错。因为它不知道你想把age转成什么布尔值。这种"严格"其实是在保护你——避免那些隐式转换带来的诡异bug。

3.4.2 switch 语句

switch在ArkTS里也能用,但有个限制:case后面的值必须是常量,不能是变量。

let status: number = 2;
let message: string = "";

switch (status) {
  case 0:
    message = "等待中";
    break;
  case 1:
    message = "进行中";
    break;
  case 2:
    message = "已完成";
    break;
  default:
    message = "未知状态";
}

3.4.3 for 循环

ArkTS支持三种for循环。我个人最常用的是for...of,因为它最直观。

// 传统for循环
for (let i: number = 0; i < 5; i++) {
  console.log(i);
}

// for...of(推荐)
let fruits: string[] = ["苹果", "香蕉", "橘子"];
for (let fruit of fruits) {
  console.log(fruit);
}

// for...in(遍历索引)
for (let index in fruits) {
  console.log(index);  // 输出 0, 1, 2
}

注意for...in遍历的是索引(字符串类型),for...of遍历的是值。我刚开始学的时候经常搞混,后来记住一句话:"in"是索引,"of"是值

3.4.4 while 和 do-while

这两个用得相对少一些,但偶尔也会用到。写法跟其他语言一样。

let i: number = 0;

while (i < 3) {
  console.log(i);
  i++;
}

// do-while:至少执行一次
let j: number = 0;
do {
  console.log(j);
  j++;
} while (j < 3);

3.5 本章知识体系

下面这张图帮你梳理了本章的核心知识点。建议保存下来,写代码时对照着看。

ArkTS语言基础 基本数据类型 • string:文本数据 • number:整数/浮点数 • boolean:true/false 变量声明 • let:可变变量 • const:不可变常量 • 推荐优先用const 流程控制 • if-else 条件判断 • for / while 循环 • switch 多分支 核心原则:类型安全 + 严格模式

3.6 写在最后

好了,今天的内容就到这里。ArkTS的基础语法其实不难,难的是养成"类型安全"的思维习惯。我刚开始从JavaScript转过来时,经常被编译器的报错搞得心烦。但坚持了一周后,我发现代码质量确实提高了——很多潜在bug在编译阶段就被揪出来了。

下一章咱们会深入聊聊函数和数组,这些都是写业务逻辑的"基本功"。到时候我会分享一些我在实际项目里踩过的坑,保证让你少走弯路。


公众号:蓝海资料掘金营,微信deep3321