一 运算符

在 ArkTS 里,运算符是用于执行各种操作的符号,可分为算术运算符、比较运算符、逻辑运算符、赋值运算符等。下面为你详细介绍各类运算符。

1.1 赋值运算符

赋值运算符=,使用方式如x=y。
复合赋值运算符将赋值与运算符组合在一起,其中x op = y等于x = x op y。
复合赋值运算符列举如下:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=。

1.2 算术运算符

一元运算符为-、+、–、++。
二元运算符列举如下:+、-、*、/、%

1.3 比较运算符

比较运算符用于比较两个值,返回布尔类型(true 或 false)的结果。

运算符 描述 示例
== 相等(值相等即可) let isEqual = 5 == ‘5’; // 结果为 true
=== 严格相等(值和类型都要相等) let isStrictEqual = 5 === ‘5’; // 结果为 false
!= 不相等(值不相等) let isNotEqual = 5 != 3; // 结果为 true
!== 严格不相等(值或类型不相等) let isStrictNotEqual = 5 !== ‘5’; // 结果为 true
> 大于 let isGreater = 5 > 3; // 结果为 true
< 小于 let isLess = 5 < 3; // 结果为 false
>= 大于等于 let isGreaterOrEqual = 5 >= 5; // 结果为 true
<= 小于等于 let isLessOrEqual = 5 <= 3; // 结果为 false

1.4 逻辑运算符

逻辑与&&、逻辑或||、逻辑非!

1.5 位运算符

运算符 说明
a & b 按位与:如果两个操作数的对应位都为1,则将这个位设置为1,否则设置为0。let result = 5 & 3; // 二进制 101 & 011 结果为 001,即 1
a I b 按位或:如果两个操作数的相应位中至少有一个为1,则将这个位设置为1,否则设置为0。
a ^ b 按位异或:如果两个操作数的对应位不同,则将这个位设置为1,否则设置为0。let result = 5 ^ 3; // 二进制 101 ^ 011 结果为 110,即 6
~ a 按位非:反转操作数的位。let result = ~5; // 二进制取反,结果为 -6
a << b 左移:将a的二进制表示向左移b位。let result = 5 << 1; // 二进制 101 左移一位为 1010,即 10
a >> b 算术右移:将a的二进制表示向右移b位,带符号扩展。let result = 5 >> 1; // 二进制 101 右移一位为 010,即 2
a >>> b 逻辑右移:将a的二进制表示向右移b位,左边补0。let result = -5 >>> 1; // 处理负数时与 >> 有区别

1.6 条件(三元)运算符

条件运算符是一种简洁的条件判断方式,语法为 条件 ? 表达式1 : 表达式2。若条件为 true,则返回表达式 1 的值;若为 false,则返回表达式 2 的值。

let age = 18;
let isAdult = age >= 18 ? '是成年人' : '不是成年人';
console.log(isAdult); // 输出 '是成年人'

1.7 空值合并运算符

空值合并运算符 ?? 用于在左侧操作数为 null 或 undefined 时,返回右侧操作数的值。

let value = null;
let result = value ?? '默认值';
console.log(result); // 输出 '默认值'

1.8 可选链运算符

可选链运算符 ?. 允许在访问对象属性或方法时,若对象为 null 或 undefined,则直接返回 undefined,避免出现错误。

let person = {
    name: 'Alice',
    address: {
        city: 'New York'
    }
};

let city = person?.address?.city;
console.log(city); // 输出 'New York'

let person2 = null;
let city2 = person2?.address?.city;
console.log(city2); // 输出 undefined

二 语句

2.1 条件语句

ArkTS 支持 if-else 和 switch 条件语句。
if-else:依据条件执行不同的代码块。

let age: number = 20;
if (age >= 18) {
    console.log('成年人');
} else {
    console.log('未成年人');
}

switch:针对不同的情况执行不同的代码块。

let day: number = 3;
switch (day) {
    case 1:
        console.log('星期一');
        break;
    case 2:
        console.log('星期二');
        break;
    default:
        console.log('其他日期');
}

2.2 循环语句

ArkTS 提供了 for、For-of、while 和 do-while 循环语句。
for:适用于已知循环次数的情况。

for (let i = 0; i < 5; i++) {
    console.log(i);
}

For-of:使用for-of语句可遍历数组或字符串。示例如下:

for (forVar of expression) {
  statements
}

for (let ch of 'a string object') {
  /* process ch */
}

while:在条件为真时持续执行循环体。

let j = 0;
while (j < 5) {
    console.log(j);
    j++;
}

do-while:至少执行一次循环体,然后再检查条件。

let k = 0;
do {
    console.log(k);
    k++;
} while (k < 5);

2.3 其他语句

Break语句

使用break语句可以终止循环语句或switch。

Continue语句

continue语句会停止当前循环迭代的执行,并将控制传递给下一个迭代。

Throw和Try语句

throw语句用于抛出异常或错误:throw new Error('this error')
try语句用于捕获和处理异常或错误:
typescript try { // 可能发生异常的语句块 } catch (e) { // 异常处理 }
下面的示例中throw和try语句用于处理除数为0的错误:

class ZeroDivisor extends Error {}

function divide (a: number, b: number): number{
  if (b == 0) throw new ZeroDivisor();
  return a / b;
}

function process (a: number, b: number) {
  try {
    let res = divide(a, b);
    console.log('result: ' + res);
  } catch (x) {
    console.log('some error');
  }
}

支持finally语句:

function processData(s: string) {
  let error: Error | null = null;

  try {
    console.log('Data processed: ' + s);
    // ...
    // 可能发生异常的语句
    // ...
  } catch (e) {
    error = e as Error;
    // ...
    // 异常处理
    // ...
  } finally {
    if (error != null) {
      console.log(`Error caught: input='${s}', message='${error.message}'`);
    }
  }
}

2.4 函数声明语句

在 ArkTS 中,可使用 function 关键字声明函数。

function add(a: number, b: number): number {
    return a + b;
}
let result = add(3, 5);

2.5 类和继承语句

ArkTS 支持面向对象编程,能够使用 class 关键字定义类,使用 extends 关键字实现继承。

class Animal {
    constructor(public name: string) {}
    speak() {
        console.log(`${this.name} 发出声音`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} 汪汪叫`);
    }
}

let dog = new Dog('旺财');
dog.speak();

2.6 模块导入和导出语句

在 ArkTS 里,可以使用 import 和 export 语句来处理模块。
导出模块

// utils.ts
export function multiply(a: number, b: number): number {
    return a * b;
}

导入模块

// main.ts
import { multiply } from './utils';
let product = multiply(2, 3);

2.7 异步语句

ArkTS 支持 async/await 语法来处理异步操作。

function fetchData(): Promise<string> {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve('数据已获取');
        }, 1000);
    });
}

async function main() {
    let data = await fetchData();
    console.log(data);
}

main();
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐