【JavaScript】在JavaScript中使用switch(true)

开发专案时,在其中的某个环节,想说除了switch之外,是否有更好的写法,上网一查发现,还有switch(true)这种用法,感觉还蛮新奇的,第一次接触到的人或许会对expression里面怎会是true感到疑惑。

首先,我们先来讨论以下情境:
请依照分数高低,分配SABCD级距。

一般的情况都会这样写:

if (score === 100) {
  level = 'S';
} else if (score >= 90 && score < 100) {
  level = 'A';
} else if (score >= 80 && score < 90) {
  level = 'B';
} else if (score >= 70 && score < 80) {
  level = 'C';
} else if (score >= 60 && score < 70) {
  level = 'D'
} else {
  level = '不及格'
}

使用条件(三元)运算子,更简洁

level =
  score === 100 ? 'S' : score >= 90 && score < 100 ?
    'A' : score >= 80 && score < 90 ?
      'B' : score >= 70 && score < 80 ?
        'C' : score >= 60 && score < 70 ?
          'D' : '不及格'

最後是今天要讨论的主题switch(true)

switch (true) {
  case score === 100:
    level = 'S';
    break;
  case score >= 90 && score < 100:
    level = 'A';
    break;
  case score >= 80 && score < 90:
    level = 'B';
    break;
  case score >= 70 && score < 80:
    level = 'C';
    break;
  case score >= 60 && score < 70:
    level = 'D';
    break;
  default:
    level = '不及格';
}

为何switch (true)可行,答案其实很简单:case条件是用来跟expression匹配的

switch不只是用来比对stringnumber,也可以比对boolean

至於可读性,第二种相对会比较差。

个人会比较喜欢第三种,你们觉得呢?


<<:  [Go mod 起手式] - Golang 套件到底要怎麽用?!

>>:  使用 TorchServe 部署 Model

Spring Framework X Kotlin Day 5 JPA

GitHub Repo https://github.com/b2etw/Spring-Kotlin...

Day-03 说明在 Ruby 里常数 (constant) 跟变数 (variable) 的差别是什麽?

其实在 Ruby 的世界里常数(constant)和变数(variable)两者的差别并不大! 他...

Day11-JDK堆内存快照工具-jmap(一)基本应用

前言 总算要来介绍让我踏入JDK研究的工具了!!jmap可做到的事情很多,所以我会拆成几篇来介绍。 ...

[Day 13] 简单的单元测试实作(七)-建立共用的函式

昨天有提到, 其实我们通常不会把函式直接写在web.php当中, 其实我们回传的这个资料, 如果要透...

[Day 27] - 新手也能懂的Arduino! – (4)如何看懂电路图Part.2

17King 制造中,订阅一下吧(*´∀`)~♥ 今日影片长度:07 分 20 秒 本集重点条列: ...