跟着坚果派社区从零开始学鸿蒙——ArkTS语言基础-if逻辑语句与switch开关

If语句

if语句用于需要根据逻辑条件执行不同语句的场景。当逻辑条件为真时,执行对应的一组语句,否则执行另一组语句(如果有的话)。

else部分也可能包含if语句。

if语句如下所示:

if (condition1) {
  // 语句1
} else if (condition2) {
  // 语句2
} else {
  // else语句
}

条件表达式可以是任何类型,非boolean类型会进行隐式类型转换:

let s1 = 'Hello';
if (s1) {
  console.info(s1); // 打印“Hello”
}

let s2 = 'World';
if (s2.length != 0) {
  console.info(s2); // 打印“World”
}

Switch语句

使用switch语句执行与switch表达式值匹配的代码块。

switch语句如下所示:

switch (expression) {
  case label1: // 如果label1匹配,则执行
    // ...
    // 语句1
    // ...
    break; // 可省略
  case label2:
  case label3: // 如果label2或label3匹配,则执行
    // ...
    // 语句23
    // ...
    break; // 可省略
  default:
    // 默认语句
}

如果switch表达式的值等于某个label的值,则执行相应的语句。

如果没有任何一个label值与表达式值相匹配,并且switch具有default子句,那么程序会执行default子句对应的代码块。

break语句(可选的)允许跳出switch语句并继续执行switch语句之后的语句。

如果没有break语句,则执行switch中的下一个label对应的代码块。

条件表达式

条件表达式根据第一个表达式的布尔值来返回其他两个表达式之一。

示例如下:

condition ? expression1 : expression2

如果condition的值为真值(转换后为true的值),则使用expression1作为该表达式的结果;否则,使用expression2。

示例:

let message = Math.random() > 0.5 ? 'Valid' : 'Failed';

condition如果是非bool值则会进行隐式转换。

示例:

    console.info('a' ? 'true' : 'false'); // true
    console.info('' ? 'true' : 'false'); // false
    console.info(1 ? 'true' : 'false'); // true
    console.info(0 ? 'true' : 'false'); // false
    console.info(null ? 'true' : 'false'); // false
    console.info(undefined ? 'true' : 'false'); // false

if与Switch的区别

条件类型

if:可以测试任何类型的布尔条件

switch:只能测试相等性条件,且表达式结果必须是整数、枚举、字符串或字符类型

执行流程

if:从上到下逐条判断,找到第一个满足的条件就执行对应代码块

switch:先计算表达式的值,然后直接跳转到匹配的case标签处,若无break则会继续执行下一个case(称为"fall-through"特性)

性能

if:多个条件时需要逐个判断,性能可能较低

switch:编译器通常会优化为跳转表或二分查找,对于多条件比较通常更高效

适用场景

if:适合复杂条件判断、不同类型条件、范围判断

switch:适合单个变量与多个确定值的比较

可读性

if:条件复杂时可能导致嵌套过深,可读性下降

switch:对于多值比较时结构更清晰

灵活性

if:可以处理任意复杂的条件表达式

switch:表达能力相对有限,但结构更规范

使用建议

  • 当需要比较同一变量的多个可能值时,优先使用switch
  • 当条件涉及范围判断或复杂逻辑时,使用if
  • 在switch中记得使用break避免意外的fall-through
  • 对于只有少量简单条件的情况,两者差别不大,可根据代码风格选择
特性if 语句switch 语句
语法结构if (条件) {...} else if (条件) {...} else {...}switch (表达式) { case 值1: ... break; case 值2: ... break; default: ... }
条件类型可测试任何布尔条件(支持比较运算符、逻辑运算符等组合)仅支持表达式与常量值的相等性判断,表达式结果需为整数、枚举、字符串或字符类型
条件复杂度支持复杂逻辑表达式(如 `a > 5 && b < 10c === true`)仅支持单个表达式与固定常量的匹配(如 case 1:case "apple":
执行流程从上到下逐条判断条件,执行第一个满足条件的分支后终止(或执行 else)先计算表达式值,直接跳转到匹配的 case 分支;若未加 break,会继续执行后续 case(Fall-through)
性能多条件时需依次判断,条件数量越多,判断效率可能越低编译器通常优化为跳转表或二分查找,多值比较时效率更高(尤其条件数量≥5 时)
适用场景复杂条件判断(范围、逻辑组合)、不同类型条件混合判断单个变量 / 表达式与多个确定值的匹配(如状态码、枚举值、固定选项)
可读性条件少时简洁清晰,条件过多时易出现嵌套过深(如多层 else if多值比较时结构更规整,分支清晰,减少代码冗余
灵活性极高,可处理任意复杂的条件逻辑(包括动态计算的条件)表达能力有限,仅支持固定值匹配,无法直接处理范围或逻辑组合条件
Fall-through 特性无,每个分支执行后自动终止(除非显式嵌套)默认存在,需手动添加 break 防止分支穿透(可利用该特性实现多值共享逻辑)
默认情况处理通过 else 子句处理所有未匹配的条件通过 default 子句处理表达式未匹配任何 case 的情况
代码量条件多时需重复编写判断逻辑,代码量较大条件越多越能体现简洁性,无需重复编写表达式
嵌套支持支持多层嵌套(如 if 内部嵌套 if),但过深会降低可读性支持 case 内部嵌套 if 或 switch,但整体结构更扁平化
常量要求条件可包含变量、函数调用等动态值case 后的值必须是编译期常量(如字面量、枚举值),不能是变量或动态表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红目香薰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值