switch语句
switch的优点:
1.选择结构更加清晰,一目了然。
2.执行速度相对较快。
switch的执行逻辑:从switch后面圆括号里的变量与case后边的常量相等的地方开始,依次执行指令,直到指令结束。
case的作用:不会参与到运算当中,不起条件判断作用,否则执行逻辑就解释不通了。
case是起到标号的作用
标号是什么?
在计算机里,标号只是存储了指令的地址。
break的作用:直接跳出选择结构。
break在switch里,只是起到了辅助作用,并不属于switch语句。
<script>
/*
* 假设:
* 12月、1月、2月为“冬”
* 3月、4月、5月为“春”
* 6月、7月、8月为“夏”
* 9月、10月、11月为“秋”
* 1)得到月份
* 2)一共四个分支
* 3)每个分支分3个月
* 3)12个case,每个月一个case
* */
var month = Number(prompt("请输入月份"));
var season;
switch (month){
case 12:
case 1:
case 2:season = "冬";break;
case 3:
case 4:
case 5:season = "春";break;
case 6:
case 7:
case 8:season = "夏";break;
case 9:
case 10:
case 11:season = "秋";break;
}
alert(season);
</script>
在switch中,几个case是可以公用一条指令的,相邻的相同指令的,可以只写最后一条指令并用break结束选择结构。
错误与调试
2.1错误的概念与处理
计算机程序的错误有两种:语法错误和逻辑错误。
比如alert拼写错误,写成了alter
<script>
var a = 3 + 4;
alert(a)
alter(a);
a++;
alert(a);
</script>
运行结果只显示了7,后面的结果没有显示,说明后面的代码没有执行。因为输出7后遇到了语法错误,程序终止执行。
上例也进一步说明了解释性语言的特点:翻译一条,执行一条,遇到错误提前终止执行。
var b = a + 3;
alert(b);
语法错误的发现方法:
(1)开发者工具的console窗口,能显示错误及其说明
(2)try……catch捕获异常
逻辑错误:程序在语法上是没有问题的,但是实际执行结果和预期结果有出入。
<script>
/*报名参军的年龄条件:17~24周岁*/
var age = Number(prompt("请问你的年龄是?"));
if(17<=age<=24){
alert("欢迎你报名参军!");
}else{
alert("抱歉,你不能参军!");
}
</script>
当输入年龄为96或3,都能报名参军,结果显然是错误的,但执行过程来看,没有任何语法错误。
调试的基本原理:
程序的执行是自动的,而且速度非常快,无法了解中间的执行过程。
但是几乎所有的开发工具都提供了调试的功能,可以去控制程序的执行节奏,从而可以让开发者看清执行的过程。
怎么去控制执行节奏呢
(1)设置断点
按F12打开开发者工具,点击sources,双击目标文件,在可能出问题的代码(行号)的前面单击即可在该处设置断点
(2)单步执行(step)
每执行一步都会停下来,然后在继续下一步
快捷键F10
控制节奏的目的是看清或者了解程序的执行过程,而不仅仅是结果。
怎么看结果呢
(1)查看程序执行的步骤,也就是上图中的指示即将要执行的代码指示器,如果轨迹与预期不一致,说明上一步执行的代码出现逻辑错误了。
(2)查看变量、表达式的值
a.在watch窗口添加要查看的变量或表达式,比方输入age
此时就可以看到变量age的值,
也可以通过在代码中选中要查看的变量或表达式,右键选择Add selected text to watches
在watch窗口就可以看到添加的变量或者表达式的值
因为计算机程序的每一步执行的结果都是唯一的、可预期的;同时我们又可以通过上述手段控制程序的运行节奏并查看程序执行的状态(如轨迹、变量表达式的值),也就是可以看到实际的执行结果。那么将实际结果和预期结果对比,如果出现不一致,说明刚刚执行的那一步出现的错误,即定位错误。
一旦定位错误,根据所学知识或经验,应该就很容易分析出出错误原因,从而找到解决方案。
再来调试一个程序
<script>
var a = prompt("请输入第一边长");
var b = prompt("请输入第二边长");
var c = prompt("请输入第三边长");
var p = (a + b + c) / 2;//计算周长的一半
var s = Math.sqrt(p * (p - a) * (p - b) * (p - c));//海伦公式计算面积
alert(s);
</script>
运行程序,程序将在预定断点位置停下来
查看变量a,b,c的值
单步执行,查看p的值
再看看a+b+c的值
a+b+c的值不是我们预期的6,而是“345”。原来是做了字符串的拼接运算,而不是我们希望的加法,所以是类型问题。
解决方案就是将输入的数据(字符串)转换为数值
再重新调试程序,并查看结果
调试工具不仅仅是定位错误的工具,也是一个非常重要的学习工具。因为调试工具可以让我们直观地看到程序的运行轨迹以及运行状态,有助于我们对于一些抽象知识的理解。