Javascript switch语句是一种类似于if-else语句的控制语句。它们确定表达式的计算结果是否为许多可能值中的一个,然后根据该值执行指令。

Javascript Switch语句概述

switch语句使用保留字来标识它的每个部分:

  • switch—switch语句
  • 标识语句计算的表达式的有效值
  • default -当表达式计算为无效值时使用的特殊情况
  • break -终止案例中指令的执行
switch(表达式){case 1:…指令……打破;案例2:……指令……打破;默认值:……指令……打破;}

与if-else语句不同,switch语句在找到表达式匹配后不会停止求值。除非使用保留字“break”强制停止执行,否则switch语句将在匹配的大小写之后继续计算大小写。

在下面的代码中,如果表达式求值为1,则将执行case 1、case 2和default case下的指令。

switch(表达式){case 1:…说明……案例2:……说明……默认值:……说明……}

这种行为称为失败,是switch语句中许多无意错误的根源。Fall-through可能是有用的,但是,如果你在一个switch语句中有多个情况,应该执行相同的代码:

switch (expression) {case 1: case 3:…说明……打破;案例2:……说明……打破;默认值:……说明……打破;}

Switch语句总是从上到下进行计算。大小写的顺序并不重要,只要您总是在所有不应该失败的大小写的最后保留单词“break”。

为了执行case的指令,switch语句中的表达式的结果必须具有与case相同的类型和值。这叫做严格比较。

在下面的示例中,表达式将匹配默认的大小写,因为字符串“1”与匹配大小写所需的数字1不是相同的类型和值。case需要一个数字,而不是字符串,因此对case进行比较失败。

设x = " 1 ";switch (x) {case 1:…说明……打破;默认值:……说明……打破;}

何时使用Javascript开关语句

Javascript switch语句描述了当表达式求值为某个值时应该执行的操作,因此它们不应该用于程序中的主要逻辑流。If-else语句更适合定义逻辑。

switch语句在后台创建了一个表,程序每次遇到这个表时都不需要重新求值,这使得它比等价的if-else语句快得多。因此,当有许多不同的可能选项时,Switch语句对于处理固定值特别有用。

动态类型语言(如Javascript)可能并不总是能从这种方法中获得与强类型语言(如c++)相同的速度优势。但是,Switch语句仍然比if-else语句需要更少的计算,从而导致更低的执行时间,这是创建不引人注目的Javascript的关键因素。

您还可以将一长串if-else语句转换为单个switch语句。如果这是可能的,可读性和速度都会提高,但是if-else语句中的所有条件都必须转换为固定的值。

// // If-else语句链//让x = resultFromAFunction();if (x == 1){…说明……} else if (x == 2){…说明……} else if (x == 3){…说明……} else if (x == 4){…说明……} else if (x == 5){… instructions ... } else { ... instructions ... } // // Switch statement // switch (resultFromAFunction()) { case 1: ... instructions ... break; case 2: ... instructions ... break; case 3: ... instructions ... break; case 4: ... instructions ... break; case 5: ... instructions ... break; default: ... instructions ... break; }

Javascript Switch语句的最佳实践

保持代码简单

当在switch语句中为case编写指令时,您可以创建任何类型的代码。添加变量声明和其他控制结构会使switch语句很快变得复杂:

switch (resultFromAFunction()) {case 1: if (doThis){…说明……}……说明……打破;案例2:……说明……while (somethingElse){…说明……}打破; default: ... instructions ... break; }

尽量把每一个箱子的说明写得尽量小,这样一目了然。理想情况下,坚持简单的变量分配。如果你发现你的情况变得越来越复杂,一个If -else语句可能更适合你的需求。

在处理案件时保持一致

switch语句允许您将默认用例放在用例列表中的任何位置,只要您在用例的末尾使用保留字“break”即可。为了便于阅读和维护,大多数程序员希望在案例列表的最开始或最末尾看到一个“默认”。

在这些地方中选择一个,并坚持到你的整个计划-没有一个比另一个有优势,所以选择一个更容易记住。如果您始终知道在哪里查找,那么在大型switch语句中查找默认情况就会容易得多。

// // Default at begin of switch // switch (expression) {Default:…说明……打破;案例1:……说明……打破;案例2:……说明……打破;} // // Default at end of switch // switch (expression) {case 1:… instructions ... break; case 2: ... instructions ... break; default: ... instructions ... break; }

尽可能使用不同的情况

由于switch语句使用严格的比较,所以如果有两种不同类型的值相似的情况,也不会感到混淆。试图维护你的代码的人可能会感到困惑,就像在这个例子中,第一种情况是数字1,第二种情况是字符串“1”:

switch(表达式){case 1:…说明……打破;“1”:…说明……打破;默认值:……说明……打破;}

乍一看,维护代码时,数字1和字符串“1”看起来非常相似,可能不清楚为什么这两种情况需要不同。当您遇到类似的情况时,这通常表明您可以通过在比较它们之前确保所有的case值都是相同的类型来简化代码。

如果您不能简化代码,并且绝对需要类似的情况,那么请确保在switch语句中添加注释,澄清为什么这些情况是相似的,以及它们各自的作用是不同的。

结论

尽管switch语句和if-else语句都基于计算结果执行代码,但这两种语句类型具有不同的优点,并且不可互换。Switch语句不像if-else语句那样适合创建复杂的逻辑流。

参加我们的纳米级编程入门188金宝搏安不安全program today学习更多关于Javascript switch语句和其他编程概念的知识!

开始学习