switch语句以及与if的比较

HTML5学堂:JS的三大语句类型当中,有一种分支/选择性语句——switch。我们常说switch可以适当的和if配合使用,那么switch语句到底怎么书写,如何运用,和if语句的区别以及选用原则又是什么?一起来看今天的内容。

有时并不那么友好的if语句

条件语句,我们通常都使用if来处理,特别是针对一个范围区间,需要执行不同功能代码时,尤为可用。但是,一旦遇到如下这种情形,我们就会觉得if有些麻烦了~

if (rank == 'A') {
   console.log('优秀');
} else if (rank == 'B') {
   console.log('良好');
} else if (rank == 'C') {
   console.log('一般');
} else if (rank == 'D') {
   console.log('需要加油啦');
} else {
   console.log('差');
}

上面这种if结构,针对一种答案需要执行一种内容,且条件并非区间。此时,的确可以使用if语句,但是从视觉上来说,很容易造成的混乱,一旦代码出问题,排查错误相对比较麻烦,而switch语句恰恰可以解决这种尴尬。

switch语句的基本语法

如下为switch语句的基本语法:

switch(表达式A) {
   case 表达式1 : 代码段1;
   break;
   case 表达式2 : 代码段2;
   break;
   case 表达式3 : 代码段3;
   break;
   default : 代码段4;
}

1 表达式A是要进行判断/比对的表达式,让每个case后面的表达式与表达式A相比较,如果两者全等,则执行相应case后面的语句。

2 break关键字可以结束switch语句。break语句并非必须存在的,如果没有break,则从符合条件的case开始一直往下执行到switch结束或者遇到break。

3 default,一般用在最后,表示非以上的任何情况下而发生的情况。switch最后执行default语句,如果default后面带有break,那么程序就会正常跳出switch,否则,程序会继续向后执行switch语句。也就是说,不管default放在什么位置,它总是在最后一个处理,然后继续向下处理。

4 此外,可以有多个case的语句。(加入两种case要执行同样的内容,可以书写为 case 表达式1: case 表达式2: 代码段)

对于如上几点不是很清楚的童鞋不要着急,一会我们会书写例子。现在先来看看,如果我们使用switch代替if语句书写上面的例子,会不会变得简单一些呢?

switch书写刚刚的实例

<script>
   var rank = 'B';
   switch (rank) {
       case 'A' : console.log('优秀'); break;
       case 'B' : console.log('良好'); break;
       case 'C' : console.log('一般'); break;
       case 'D' : console.log('需要加油啦'); break;
       default : console.log('差'); break;
   }
</script>

很明显,针对这个例子,从可读性的角度来说,switch要简单的多。

switch语句中具体命令实例

关于break语句

如果在一个case命令后不书写break,会是什么结果?看如下例子:

<script>
   var rank = 'B';
   switch (rank) {
       case 'A' : console.log('优秀'); break;
       case 'B' : console.log('良好');
       case 'C' : console.log('一般');
       case 'D' : console.log('需要加油啦'); break;
       default : console.log('差'); break;
   }
</script>

此段代码会输出:“良好” “一般” “需要加油啦”。之所以是这个结果,就在于我们之前刚刚提过的:如果没有break,则从符合条件的case开始一直往下执行到switch结束或者遇到break。

关于default语句

如果defalut语句放在了前面怎么办呢?看如下例子:

<script>
   var rank = 'E';
   switch (rank) {
       default : console.log('差'); break;
       case 'A' : console.log('优秀'); break;
       case 'B' : console.log('良好'); break;
       case 'C' : console.log('一般'); break;
       case 'D' : console.log('需要加油啦'); break;
   }
</script>

此处rank为E,必然不符合A~D,所以执行default。输出“差”,之后遇到了break,直接跳出switch语句。

稍微调整一下代码:

<script>
   var rank = 'E';
   switch (rank) {
       default : console.log('差');
       case 'A' : console.log('优秀'); break;
       case 'B' : console.log('良好'); break;
       case 'C' : console.log('一般'); break;
       case 'D' : console.log('需要加油啦'); break;
   }
</script>

此处输出的则是“差” “优秀”。这就是说,不管default放在什么位置,它总是在最后一个处理,然后继续向下处理。。因此,为了避免出现错误的结果,最好办法就是每一个case以及default语句都要加一个break语句。

JS的switch与其他语言的不同

JS中的switch语句中可以使用任何数据类型(很多其他语言只能使用数值),case的值也不一定是常量,也可以是表达式。如下面实例:

switch语句为表达式 - 实例

var x = 5;
switch(x > 3) {
   case true : console.log('x > 3'); break;
   case false : console.log('x <= 3'); break;
}

switch语句的case值为表达式 - 实例

switch("h5course") {
   case "h5" + "course": alert("h5course");
   break;
   case "HTML5Course" : alert("HTML5Course");
   break;
   default : alert("other");
}

需要注意的是,switch语句在进行值的比较时,使用的是全等操作符("==="),也就是说两个表达式的结果,既需要值一样,也要类型相同。

if与switch的选择

1 从视觉层面上来说,对于一部分功能,选用switch语句可以精简代码,提升视觉效果。

2 从性能角度来说,由于switch的条件简单,编译器会为它做二分法优化(或跳转表),平均性能相对会高一些。而if else所比较的条件会远远比switch的复杂,编译器通常不会做过多的优化。简言之就是对于常量方面的条件判断,switch性能略胜于if语句。

到底何时使用switch?

如果需要判断的是几个常量的数据,建议使用switch;如果条件比较复杂(如:x > 3 && x < 10),建议使用if语句。

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2016-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白的技术客栈

Python内置数据结构之字典

今天给大家讲解Python内置数据结构:字典。字典的内容比较多,今天只是简单地介绍一下,明天会继续补充字典相关的内容。 关于Windows的环境安装及配置,小白...

2734
来自专栏数据结构与算法

Stirling数

第一类: 定义 第一类Stirling数表示表示将 n 个不同元素构成m个圆排列的数目。又根据正负性分为无符号第一类Stirling数 ? 和带符号第一类...

31210
来自专栏玄魂工作室

如何学python-第五课 流程控制初阶

当我们写程序的时候,我们首要思考的问题就是,程序接收什么样的输入,产生什么样的输出。控制用户的输入,进行一系列处理,并最终得到一个输出,这中间的过程就叫做流程控...

27210
来自专栏C语言及其他语言

[每日一题]C语言程序设计教程(第三版)课后习题5.6

题目描述 给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60...

2835
来自专栏Crossin的编程教室

【Python 第17课】 类型转换

昨天又被微信后台给坑了,导致有些同学收了2遍消息。希望今天能顺利发成功。。。 #==== 类型转换 ====# python的几种最基本的数据类型,我们已经...

2516
来自专栏C语言及其他语言

[每日一题]整数调换

自定义函数和数组的应用 题目描述 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出1...

2646
来自专栏小狼的世界

Leetcode刷题记录:构建最大数二叉树

给定一个不含重复数字的数组,最大二叉树构建规则如下: 1、根是数组中最大的数字 2、左边的子树是最大数字左边的内容 3、右边的子树是最大数字右边的内容

662
来自专栏喵了个咪的博客空间

zephir-(10)内置函数

#zephir-内置函数# ? ##前言## 先在这里感谢各位zephir开源技术提供者 嗨!大家好呀,今天要和大家一同学习zephir的内置函数,学过PHP的...

3418
来自专栏林冠宏的技术文章

介绍一个很爽的 php 字符串特定检索函数---strpos()

大家在用 php 开发的时候 是否 有遇到过,对于一个获取的字符串,如果想要特定检测它是否 含有某个特定的字符或者子字符串,总是找不到好方法,或者根本做不到,迫...

1607
来自专栏TungHsu

这或许是对小白最友好的python入门了吧——2,变量和字符串

长期以来,编程界都认为刚接触一门新语言时,如果首先使用它来编写一个在屏幕上显示消息 “Hello world!” 的程序,将给你带来好运。 因为微信排版编辑问题...

2625

扫描关注云+社区