JavaScript中的Switch语句

Switch statement multiple cases in JavaScript

 Ling Lin     2017-04-23   2111 words    & views

什么是Switch语句

Switch语句是在不同的条件下执行与之相匹配的语句,它是一种条件语句。

基本语法

switch (expression) {
  case value1: statement1 //当 expression 的结果与 value1 匹配时,执行statement1
    break;
  case value2: statement2 //当 expression 的结果与 value2 匹配时,执行statement2
    break;
  case value3: statement3 //当 expression 的结果与 value3 匹配时,执行statement3
    break;
  case value4: statement4 //当 expression 的结果与 value4 匹配时,执行statement4
    break;
  default: statementN //当 expression 的结果与以上value都不匹配时,执行statementN
}

语法解释

expression是一个用来与casevalue做匹配的表达式,通常是一个变量。如果匹配,就会执行该 case后面的语句(statement)。break关键字用来阻止代码自动地向下一个case运行,这个下面还会给出例子。default关键字用于匹配不存在的情况。

实例

var val = 1;
switch(val){
   case 1:  console.log('apple');
   break;
   case 2:  console.log('bird');
   break;
   default:  console.log('stuff');
}

执行以上代码,输出的结果是:

apple

如果去掉case1与case2之间的break关键字:

var val = 1;
switch(val){
   case 1:  console.log('apple');
   case 2:  console.log('bird');
   break;
   default:  console.log('stuff');
}

输出的结果是:

apple
bird

这就说明了break的作用,遇到关键字break时,程序就会跳出switch结构,如果省略掉break,会导致执行完当前的case后自动执行下一个case。


Switch语句与if语句

其实看到这里,发现switch 语句与 if语句很相似,都是条件语句,在不同的条件下执行不同的语句。

例1:下面是一段if语句:

if (val === 1) {
  answer = "a";
} else if (val === 2) {
  answer = "b";
} else if (val === 3){
  answer = "c";
} else {
	answer = "d"
}

这就等同于switch语句:

switch (val) {
  case 1:answer = "a";
    break;
  case 2:answer = "b";
    break;
  case 3:answer = "c";
    break;
  default:answer = "d";
}

由上可以有如下总结:

  • default关键字就相当于if语句最后一个else

  • 当条件很多的时候,用switch更清晰,避免写一堆esle if

  • if语句,每个条件都会执行一遍,直到找到匹配值

  • switch语句,不会逐个比较查询,不管有多少case,仅计算一次


JS中switch语句的特点

switch语句中可以使用任何数据类型,number,boolean, string,object…..,而在其他很多语言中数据类型仅限于数值。

比如:


switch("apple"){
   case "apple": console.log("Apples are $0.32 a pound");
	 break;
   case "bananas": console.log("Bananas are $0.6 a pound");
	 break;
   default: console.log("Is there anything else you'd like?")
}

 switch(val){
    case "a": console.log("apple");
      break;
    case "b": console.log("bird");
      break;
    case "c": console.log("cat");
      break;
    default: console.log("stuff");
  }

对每个 case 的匹配是 ===(strict equality) 运算符比较,而不是 ==运算符比较,因此,表达式和 case 的匹配不会做任何类型转换。如果对于======区别存在疑问,可以参考这里