if和switch该如何选择

if的基本写法

const a = 10;
if (a > 0) {
  console.log('a大于0');
} else if (a < 0) {
  console.log('a小于0');
} else {
  console.log('a等于0');
}

switch

const gender = 'male';
switch (gender) {
  case 'male': {
    console.log('男性');
    break;
  }
  case 'female': {
    console.log('女性');
    break;
  } // added brackets
  default: {
    console.log('保密');
    break;
  }
}

if 和 switch 都可以设计多重分支结构,一般情况下 switch 执行效率要高于 if 语句。但是也不能一概而论,应根据具体问题具体分析。简单比较如表所示。

语句if 语句switch 语句
结构通过嵌套结构实现多重分支专为多重分支设计
条件可以测试多个条件表达式仅能测试一个条件表达式
逻辑关系可以处理复杂的逻辑关系仅能处理多个枚举的逻辑关系
数据类型可以适用任何数据类型仅能应用整数、枚举、字符串等类型

相对而言,下面情况更事宜选用 switch 语句。

  • 枚举表达式的值。这种枚举是可以期望的、平行的逻辑关系。
  • 表达式的值具有离散性,是不具有线性的非连续的区间值。
  • 表达式的值是固定的,不会动态变化。
  • 表达式的值是有限的,不是无限的,一般应该比较少。
  • 表达式的值一般为整数、字符串等简单的值。

下面情况更事宜用 if 语句。

  • 具有复杂的逻辑关系。
  • 表达式的值具有线性特征,去对连续的区间值进行判断。
  • 表达式的值是动态的。
  • 测试任意类型的数据。

示例1

本例设计根据学生分数进行等级评定:如果分数小于 60,则不及格;如果分数在 60 与 75 之间,则评定为合格;如果分数在75 与 85 之间,则评定为良好;如果分数在 85 与 100 之间,则评定为优秀。

根据上述需求描述,确定检测的分数是一个线性区间值,因此选用 if 语句会更合适。

if (score < 60) {
  console.log("不及格");
} else if (score < 75) {
  console.log("合格");
} else if (score <85) {
  console.log("良好");
} else {
  console.log("优秀");
}

如果使用 switch 结构,则需要枚举 100 种可能,如果分数值还包括小数,这种情况就更佳复杂了,此时使用 switch 结构就不是明智之举。

示例2

设计根据性别进行分类管理。这和案例属于有效枚举条件,使用 switch 会更高效。

switch (gender) {  // 离散值判断
  case 1: {
    console.log("女士");
    break;
  }
  case 2: {
    console.log("男士");
    break;
  }
  default : {
    console.log("请选择性别");
  }
}

效率的问题,我不知道怎么验证,应该也不需要关注。只要分清什么场景适合用哪种方式就好了! 文章来源于:http://c.biancheng.net/view/5524.html