流程控制
在一个程序执行的过程中,各条代码的执行顺序对程序的结构是有直接影响的,很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能。
流程控制就是来控制我们的代码按照什么结构顺序来执行。
流程控制主要有三种结构:顺序结构、分支结构和循环结构,这三种结构代表三种代码执行的顺序。
顺序结构
顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序回按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
分支结构
由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果。
if语句结构
语句可以理解为一个行为,循环语句和分支语句就是典型的语句。
一个程序由很多个语句组成,一般情况下,会分割成一个一个的语句。
if(条件表达式){
//执行语句
}
- 如果
if
里面的条件表达式为真则执行大括号里面的执行语句 - 如果
if
条件表达式结果为假则不执行大括号里面的语句直接执行if语句后面的代码
if (3 > 5) {
alert('岳泽以')
}
alert('个人博客')//最后结果弹出个人博客
案例:判断可否上网
var age = prompt('请输入年龄')
if (age >= 18) {
alert('允许上网')
}
if...else双分支语句
如果表达式为真执行语句1否则执行语句2
if (条件表达式) {
//执行语句1
} else {
//执行语句2
}
案例:判断年份是否为闰年
var year = prompt('请输入年份')
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
alert('你输入的年份是闰年')
} else {
alert('你输入的年份是平年')
}
if语句里面的语句1和else里面的语句2最终只能有一个语句执行。
if..else..if多分支语句
就是利用多个条件来选择不同的语句执行,得到不同的结果,多选1的过程。
if (条件表达式1) {
//语句1;
} else if (条件表达式2) {
//语句2;
} else if (条件表达式3) {
//语句3;
} else {
//最后语句;
}
案例:判断成绩级别
var score = prompt('请输入分数:');
if (score >= 90) {
alert('A');
} else if (score >= 80) {
alert('B');
} else if (score >= 70) {
alert('c');
} else if (score >= 60) {
alert('D');
} else {
alert('你挂科了');
}
三元表达式
由三元运算符组成的式子叫做三元表达式。
语法结构:
条件表达式 ? 表达式1 : 表达式2
如果条件表达式结果为真,则返回表达式1的值,如果表达式结果为假,则返回表达式2的值。
var num = 10;
var result = num > 5 ? '是的' : '不是的';
alert(result);
案例:数字补0
var time = prompt('请输入一个0~59的数字');
var result = time < 10 ? '0' + time : time;
alert(result);
switchi语句
switch语句也是多分支语句,也可以实现多选1。
switch (表达式) {
case value1:
执行语句1;
break;
case value2:
执行语句2;
break;
...
default:
执行最后的语句;
}
执行思路:利用我们的表达式的值和case里面的选项值相匹配,如果匹配上,就执行该case里面的语句,如果都没有匹配上,那么执行default里面的语句。
switch (2) {
case 1:
alert('这是1');
break;
case 2:
alert('这是2');
break;
case 3:
alert('这是3');
break;
default:
alert('没有匹配结果');
}
switch语句注意事项:
- 在我们开发中,表达式经常写成变量。
- 表达式的值和case里面的值相匹配的时候是全等,必须是值和数据类型一致才可以。
- 如果当前的case里面没有break,则不会推出switch而继续执行下一个case
案例:查询水果
var name = prompt('请输入要查询的水果');
switch (name) {
case '苹果':
alert('3元/斤');
break;
case '香蕉':
alert('5元/斤');
break;
case '橘子':
alert('2元/斤');
break;
default:
alert('没有匹配结果');
}
switch和if...else if的区别
- 一般情况下,他们俩个语句可以相互替换
- switch..case语句通常处理case为比较确定值的情况,而if...else..语句更加灵活,常用于范围判断(大于、等于某个范围)。
- switch语句进行条件判断后直接执行到程序的条件语句,效率更高,而if...else语句有几种条件,就得判断多少次。
- 当分支比较少时,if..else语句的执行效率比switch语句高。
- 当分支比较多时,switch语句的执行效率比较高,而且结果更清晰。
循环结构
循环的目的:在实际问题中,有许多具有规律性的重复操作,因此在程序中要完成这类操作就需要重复执行某些语句。
在Js中,主要有三种类型的循环语句
- for循环
- while循环
- do while循环
在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件。
由循环体以及循环的终止条件组成的语句,被称之为循环语句。
for循环
for循环重复执行某些代码,通常根计数有关。
语法结构:
for (初始化变量; 条件表达式; 操作表达式) {
//循环体
}
- 初始化变量就是用var声明的一个普通变量,通常用于作为计数器使用。
- 条件表达式就是用来决定每一次循环是否执行,就是终止的条件。
- 操作表达式是每次循环最后执行的代码,经常用于我们计数器变量进行更新(递增或递减)。
for (var i = 1; i <= 100; i++) {
alert('你好!');
}
//1.首先执行里面的计数器变量 var i = 1,但是这句话在for里面只执行一次
//2.去i<=100来判断是否满足条件,如果满足条件就执行循环体,不满足条件退出循环
//3.最后去执行i++,i++是单独写的代码,递增,第一轮结束
//4.接着去执行i<=100,如果满足条件就执行循环体,不满足条件退出循环
//结果:弹出100次你好!后退出循环
执行过程:初始化变量--条件表达式--循环体--操作表达式
断点调试
断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。
断点调试可以帮助我们观察程序的运行过程。
- F12-->sources(源代码)-->找到需要调试的文件-->在程序的某一行设置断点
- Watch:监视,通过watch可以监视变量的值的变化,非常的常用。
- F11:程序单步执行,让程序一行一行的执行,这个时候观察watch中变量值的变化。
for循环重复执行相同代码
可以让用户控制输出的次数
var num = prompt('请输入要输出的次数');
for (var i = 1; i <= num; i++) {
alert('你好!')
}
for循环重复执行不相同的代码
for循环可以重复执行不同的代码,因为我们有计数器变量i的存在,i每次循环值都会变化。
案例:输入1一个人1~100岁
for (var i = 1; i <= 100; i++) {
alert('这个人今年' + i + '岁了');
}
//判断输出岁数
for (var i = 1; i <= 100; i++) {
if (i == 1) {
alert('这个人刚出生');
} else if (i == 100) {
alert('这个人已经去世了');
} else {
alert('这个人今年' + i + '岁了');
}
}
for循环重复某些相同操作
for循环因为有了计数器的存在,我们还可以重复的执行某些操作,比如做一些算术运算。
案例:计算1~100的和
var sum = 0;
for (var i = 1; i <= 100; i++) {
//sum = sum + i;
sum += i;
}
alert(sum);
追加字符串实现一行打印
var str = '';
for (var i = 1; i <= 5; i++) {
str = str + '※';
}
console.log(str);
双重for循环执行
很多情况下,单层for循环并不能满足我们的需求,比如我们要打印一个5行5列的图形、打印一个倒直角三角形等,此时就可以通过循环嵌套来实现。
循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,例如在for循环语句中,可以再嵌套一个for循环,这样的for循环语句被称之为双重for循环。
for (外层的初始化变量; 外层的条件表达式; 外层的操作表达式) {
for (里层的初始化变量; 里层的条件表达式; 里层的操作表达式) {
//执行语句;
}
}
我们可以把里面的循环看做是外层循环的语句,外层循环循环一次,里面的循环执行全部。
for (var i = 1; i <= 3; i++) {
console.log('这是外层循环的第' + i + '次');
for (var j = i; j <= 3; j++) {
console.log('这是里层循环的第' + i + '次');
}
}
for循环总结
- for循环可以重复执行某些相同的代码
- for循环可以重复执行些许不同的代码,因为我们有计数器
- for循环可以重复执行某些操作,比如算术运算符加法操作
- 随着需求增加,双重for循环可以做更多、更好的效果
- 双重for循环,外层循环一次,内存for循环全部执行
- for循环是循环条件和数字直接相关的循环
while循环
while语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环。
语法结构:
while (条件表达式) {
//循环体代码
}
执行思路:
- 先执行条件表达式,如果结果为true,则执行循环体代码;如果为false,则退出循环,执行后面代码。
- 执行循环体代码
- 循环体代码执行完毕后,程序会继续判断执行条件表达式,如条件仍为true,则会继续执行循环体,直到循环条件为false时,整个循环过程才会结束。
while (num <= 100) {
console.log('岳泽以');
num++;
}
- while循环里面也有计数器,初始化变量。
- while循环里面也有操作表达式,完成计数器的更新,防止死循环。
案例:计算1-100的和
var sum = 0;
var j = 1;
while (j <= 100) {
sum += j;
j++;
}
console.log(sum);
do while循环
do...while循环语句其实是while语句的一个变体,该循环会先执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环。
do {
//循环体
} while (条件表达式)
跟while不同的地方:
- do...while先执行一次循环体再判断条件。
- do...while循环体至少执行一次
案例:不爱我就一直弹
do {
var message = prompt('你爱我吗?');
} while (message !== '我爱你')
alert('我也爱你!');
循环总结
- JS中循环有for、while、do while
- 三个循环很多情况下都可以相互替代使用
- 如果是用来计数,跟数字相关的,三者使用基本相同,但是我们更喜欢用for
- while和do..while可以做更复杂的判断条件,比for循环灵活一些
- while和do...while执行顺序不一样,while先判断后执行,do...while先执行一次,再判断执行
- while和do...while执行次数不一样,do...while至少会执行一次循环体,而while可能一次也不执行
- 实际工作中,我们更常用for循环语句,写法简介直观
continue关键字
continue关键字用于立即跳出本次循环,继续下一次循环(本次循环中continue之后的代码就会少执行一次)。
例如:吃5个包子,第3个有虫子,就扔掉第3个,继续吃掉第4个和第5个包子。
for (var i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
console.log('我正在吃第' + i + '个包子');
}
break关键字
break关键字用于立即跳出整个循环(循环结束)。
例如:吃5个包子,吃到第3个发现里面有半个虫子,其余的(3、4、5)不吃了。
for (var i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
console.log('我正在吃第' + i + '个包子');
}
命名规范及语法格式
- 变量、函数的命名必须要有意义
- 变量的名称一般用名词
- 函数的名词一般用动词
- 操作符的左右俩侧给保留一个空格
- 单行注释前面注意有个空格