开发专案时,在其中的某个环节,想说除了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
不只是用来比对string
、number
,也可以比对boolean
。
至于可读性,第二种相对会比较差。
个人会比较喜欢第三种,你们觉得呢?