选择结构:switch
在JavaScript中,选择结构共有两种方式:①if语句;②switch语句。上一节我们介绍了if语句,这一节我们再来给大家介绍一下switch语句。
语法:
switch(判断值)
{
case 取值1:
语块1;break;
case 取值2:
语块3;break;
……
case 取值n:
语块n;break;
default:
语句块n+1;
}
说明:
从英文意思来看,switch是“开关”,case是“情况”,break是“断开”,default是“默认”。小伙伴们根据英文意思来理解就很容易了。
switch语句会根据“判断值”来判断,然后来选择使用哪一个“case”。如果每一个case的取值都不符合,那就执行default的语句。还是先来看一个例子,这样理解快一点。
举例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
var day = 3;
var week;
switch (day)
{
case 1:
week = "星期一"; break;
case 2:
week = "星期二"; break;
case 3:
week = "星期三"; break;
case 4:
week = "星期四"; break;
case 5:
week = "星期五"; break;
case 6:
week = "星期六"; break;
default:
week = "星期日";
}
document.write("今天是" + week); //输出今天是星期几
</script>
</head>
<body>
</body>
</html>
分析:
在switch语句中,系统会从第一个case开始判断,直到找到满足条件的case退出,然后后面的case就不会执行了。
对于switch和case,小伙伴都知道是怎么回事,却不太理解break和default有什么用。下面我们通过两个例子来理解一下。
举例:break语句
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
var day = 5;
var week;
switch (day)
{
case 1:
week = "星期一";
case 2:
week = "星期二";
case 3:
week = "星期三";
case 4:
week = "星期四";
case 5:
week = "星期五";
case 6:
week = "星期六";
default:
week = "星期日";
}
document.write(week); //输出今天是星期几
</script>+
</head>
<body>
</body>
</html>
分析:
day的值为5,为什么最终输出的是“星期天”呢?其实,这就是缺少break语句的结果。
实际上,在switch语句中,首先判断case的值是否符合day的值。因为day的值为5,因此会执行“case 5”这一分支。但是,由于没有在“case 5”后面加break语句,因此程序还会把后面的“case 6”以及“default”都执行了,后面week的值会覆盖前面week的值,因此最终输出的是“星期天”。
break语句用于结束switch语句,从而使JavaScript仅仅执行对应的一个分支。如果没有了break语句,则该switch语句中“对应的分支”被执行后,后面的分支还会继续被执行。因此,对于switch语句,一定要在每一个case语句后面加上break语句。
举例:default语句
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
var n = 10;
switch (n)
{
case 1:
document.write("你选择的数字是:1"); break;
case 2:
document.write("你选择的数字是:2"); break;
case 3:
分析:
在这个例子中,我们使用default来定义默认情况,因此无论n的值是10、12还是100,最终执行的也是default这一个分支。
此外,case后面的取值不仅仅是数字,也可以是字符串。switch语句在实际开发中是非常重要的,建议大家认真掌握。
循环结构:while
在JavaScript中,循环语句指的是在“满足某个条件下”循环反复地执行某些操作的语句。这就很有趣了,现在像“1+2+3+…+100”“1+3+5…+99”这种计算就可以轻松用程序实现了。
在JavaScript中,循环语句共有以下三种。
while语句
do...while语句
for语句
这一节,我们先来给大家介绍一下while语句的用法。
语法:
while(条件)
{
//当条件为true时,循环执行
}
说明:
如果“条件”返回为true,则会执行“{}”内部的程序。当执行完“{}”内部的程序后,会再次判断“条件”。如果条件依旧还是true,则会继续重复执行大括号中的程序……循环执行直到条件为false才结束整个循环,然后再接着执行while语句后面的程序。
举例:计算1+2+3+…+100的值
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
var n = 1;
var sum = 0;
//如果n小于等于100,则会执行while循环
while (n <= 100)
{
sum=sum+n;
n=n+1;
}
document.write("1+2+3+…+100 = " + sum);
</script>
</head>
<body>
</body>
</html>
分析:
变量n用于递增(也就是不断加1),初始值为1。sum用于求和,初始值为0。对于while循环,我们逐步来给大家分析。
第一次执行while循环,sum=0+1,n=2;
第二次执行while循环,sum=0+1+2,n=3;
第三次执行while循环,sum=0+1+2+3,n=4;
……
第100次执行while循环,sum=0+1+...+100,n=101。
记住,每一次执行while循环之前,我们都需要判断是否满足条件,如果满足,则继续执行while循环,如果不满足,则退出while循环。
当我们第101次执行while循环时,由于此时n=101,而判断条件n<=100返回false,此时while循环不再执行(也就是退出while循环)。由于退出了while循环,接下来就不会再循环执行while中的程序,而是执行while后面的document.write()了。
举例:计算1+3+5+…+99的值
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
var n = 1;
var sum = 0;
//如果n小于100,则会执行while循环
while (n < 100)
{
sum += n; //等价于sum=sum+n;
n += 2; //等价于n=n+2;
}
document.write("1+3+5+…+99 = " + sum);
</script>
</head>
<body>
</body>
</html>
分析:
在这个例子中,while循环的条件“n < 100”改为“n<=99”也是一样的,
因为两个条件是等价的。当然,上一个例子“n<=100”其实也等价于“n<101”。我们可以思考一下为什么?
此外,sum += n;等价于sum=sum+n;,而n+=2;等价于n=n+2;。
在实际开发中,我们一般使用简写形式,所以大家一定要熟悉这种赋值运算符的简写形式。
至于while循环是怎么进行的,可以对比一下上一个例子的具体流程,自己理清一下思路,慢慢消化一下。对于while语句,我们还需要特别注意以下两点。
循环内部的语句一定要用“{}”括起来,即使只有一条语句。
循环内部中,一定要有可以结合“判断条件”来让循环可以退出的语句,
一般来说都是i++、i+=2之类的。如果没有“判断条件”和“退出语句”,循环就会一直运行下去,变成一个“死循环”。
举例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
while (true)
{
alert("绿叶,初恋般的感觉~")
}
</script>
</head>
<body>
</body>
</html>
分析:
这就是最简单的“死循环”,因为判断条件一直为true,因此会一直执行while循环,然后会不断弹出对话框。小伙伴可以试一下,会发现没法停止对话框弹出。想要关闭浏览器,我们可以按下“Shift+Ctrl+Esc”打开任务管理器来关闭。
在实际开发中,我们一定要避免“死循环”的出现,因为这是很低级的错误。
循环结构:do…while
在JavaScript中,除了while语句,我们还可以使用do…while语句来实现循环。
语法:
do
{
…
}while(条件);
说明:
do…while语句首先是无条件执行循环体一次,然后再判断是否符合条件。如果符合条件,则重复执行循环体;如果不符合条件,则退出循环。
do…while语句跟while语句是非常相似的,并且任何一个都可以转换成等价的另外一个。
do…while语句结尾处括号后有一个分号(;),该分号一定不能省略,这是初学者最容易忽略的一点,大家一定要记得。
举例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
var n = 1;
var sum = 0;
do
{
sum += n;
n++;
}while (n <= 100);
document.write("1+2+3+…+100 = " + sum);
</script>
</head>
<body>
</body>
</html>
分析:
将这个例子与上一节的例子对比,我们可以总结出以下两点。
while语句和do...while语句是可以互相转换的,对于这两个,我们掌握其中一个就可以了。
while语句是“先判断后循环”,do...while语句是“先循环后判断”,这是两者本质的区别。
在实际开发中,我们一般都是用while语句,而不是用do...while语句,主要是do...while语句会先无条件执行一次循环,有时候用得不好的话,这个特点会导致执行了一次不该执行的循环。也就是说,我们只需要重点掌握while语句就可以了。
循环结构:for
在JavaScript中,除了while语句以及do…while语句,我们还可以使用for语句来实现循环。
语法:
for(初始化表达式;条件表达式;循环后操作)
{
…
}
说明:
初始化表达式,一般用于定义“用于计数的变量”的初始值;条件表达式,表示退出循环的条件,类似while中的条件,如n<100;循环后操作,指的是执行循环体(也就是“{}”中的程序)后的操作,类似于while中的n++之类的。
对于初学者来说,仅仅看上面的语法是无法理解的,我们还是先来看一个例子。
举例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
for(var i=0;i<5;i++ )
{
document.write(i+"<br/>");
}
</script>
</head>
<body>
</body>
</html>
分析:
在for循环中,首先定义一个用于计数的变量i,i的初始值为0。然后定义一个判断条件i<5,也就是说只要i<5就会执行for循环中的程序。最后定义一个循环后的表达式i++,也就是说每次循环之后都会进行一次i++。
第1次执行for循环
初始化:var i = 0;
判断:i<5(i的值为0,返回true)
输出:0
更新:i++(执行后i=1)
第2次执行for循环
判断:i<5(i的值为1,返回true)
输出:1
更新:i++(执行后i=2)
……
第5次执行for循环
判断:i<5(i的值为4,返回true)
输出:4
更新:i++(执行后i=5)
第6次执行for循环
判断:i<5(i的值为5,返回false)。由于i<5返回false,因此条件不满足,退出for循环。
当然,这个例子我们也可以使用while或者do…while来实现。因为程序是活的,不是死的,想要实现某一个功能,方式是多种多样的,我们要清楚这一点。
举例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script>
for (var i = 2; i < 5; i++)
{
var str = "<p style='font-size:" + i * 5 + "px'>欢迎来到绿叶学习网</p>";
document.write(str);
}
</script>
</head>
<body>
</body>
</html>
分析:
这里小伙伴要特别注意了,这里的for循环,变量i的初始值是2而不是1。在循环体中,我们使用“拼接字符串”(也就是用加号拼接的方式)来构造一个“HTML字符串”。大家好好琢磨一下这个例子,非常有用。
很多没有编程基础的初学者在for循环的学习中都会卡一下,对这种语法感到很难理解。语法记不住没关系,等你要用的时候,回来这里对着这几个例子“抄”过去,然后多写两次,自然就会了。