条件表达式决定了JavaScript程序的流向。其他语言对应该使用if-else语句还是switch语句的传统观点同样适用于JavaScript。由于不同的浏览器针对流程的控制进行了

   不同的优化。因此使用哪种技术更好没有定论。

1、if-else对比switch

               使用if-else还是switch,最流行的方法是基于测试条件的数量来判断:条件数量越大,越倾向于switch而不是if-else。这通常归结于代码的易读性。这个观点认为,当

      循环条件较少时if-else更易读,当条件数量较多时switch更易读。考虑如下代码:

             

if(found){
  //代码处理
}else(){
  //其他代码处理
}

switch(found){
   case true:
      //代码处理
	  break;
   default:
     //其他代码处理
}

      尽管两块代码完成的是相同的任务,但还是有很多人认为if-else语句比switch更容易度。然而,如果增加条件语句的数量,这种观点会被扭转过来:

            

if(color == 'red'){
    //代码处理
}else if(color == 'blue'){
   //代码处理
}else if(color == 'brown'){
   //代码处理
}else if(color == 'black'){
   //代码处理
}else {
  //代码处理
}

switch(color){
   case 'red':
      //代码处理
	  break;
   case 'blue':
      //代码处理
	  break;
   case 'brown':
      //代码处理
	  break;
   case 'black':
      //代码处理
	  break;
   default :
     //代码处理
}

          大多数人会认为对于这段代码,switch表达式比if-else表达式可读性更好。

          事实证明,大多数情况下switch比if-else运行的要快,但只有当条件数量很大时才能快得明显。这个两个语句主要性能区别是:当条件增加时,if-else性能负担增加的程度比switch要多。

  因此,我们自然倾向于在数量较少是使用if-else,而在条件数量较大时使用switch。这从性能方面考虑也是合理的。

         通常来说,if-else适用于判断两个离散值或几个不同的值域。当判断多有两个离散值时,switch语句是更佳选择。

   2、优化 if-else

                 优化if-else的目标是:最小化到达正确分支前所需判断的条件数量。最简单的优化方法是确保最可能出现的条件放到首位。考虑如下代码:

                       

if(value < 5){
  //代码处理
}else if(value > 5 && value < 10){
   //代码处理
}else{
   //代码处理
}

               该段代码只有当value值经常小于5时才是最优的。如果value大于5或者等于10,那么每次到达正确分支之前必须经过两个判断条件。最终增加了这个语句的所消耗的平均时间。if-else中的条件

     语句总应该是按照从最大概率到最小概率的顺序排列,以确保运行速度最快。

             另一种减少条件判断次数的方法是把if-else组织成一系列嵌套的if-else语句。使用单个庞大的if-else通常会导致运行缓慢,因为每个条件都学要判断。例如:

              

if(value == 0){
   return result0;
}else if(value == 1){
   return result1;
}else if(value == 2){
   return result2;
}else if(value == 3){
   return result3;
}else if(value == 4){
   return result4;
}else if(value == 5){
   return result5;
}else if(value == 6){
   return result6;
}else if(value == 7){
   return result7;
}else if(value == 8){
   return result8;
}else if(value == 9){
   return result9;
}else if(value == 10){
   return result10;
}

         在这个if-else表达式中,条件语句最多判断10次。假设value的值在1到10之间均匀分布。那么这会增加平均运行时间。为了最小化条件判断次数,代码可重写为一系列嵌套的if-else语句,比如:

             

if(value < 6){
   if(value < 3){
      if(value == 0){
	    return result0;
	  }else if(value == 1){
	     return result1;
	  }else{
	     return result2;
	  }
   }else{
     if(value == 3){
	    return result3;
	 }else if(value == 4){
	    return result4;
	 }else {
	    return result5;
	 }
   }
}else{
   if(value < 8){
      if(value == 6){
	     return result6;
	  }else{
	    return reuslt7;
	  }
   }else{
      if(value == 8){
	     return result8;
	  }else if(value == 9){
	    return result9;
	  }else{
	    return result10;
	  }
   }
}

       重写后的if-else语句每次到达正确分支最多经过4次条件判断。它使用二分法把值域分成一系列的区间,然后逐步缩小范围。当值的范围均匀分布在0到10之间时,代码运行的平均时间大约是前面例子的一半。

这个方法非常适用于有多个值域需要测试的时候(如果是 离散值,那么switch语句通常更为合适)。