流程控制主要有三种结构:顺序结构、分支结构和循环结构。
-
顺序结构:按照代码的书写顺序,从上到下逐行执行,代码执行完毕后程序结束。
-
分支结构:根据一定条件,有选择的执行和进入;比如if, if-else, switch
-
循环结构:某段固定的代码,重复执行多次。for, while, do...while
顺序结构
顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,从上而下,一行一行执行,程序中大多数的代码都是这样执行的。
分支结构
分支结构也被称为选择结构。分支结构有特定的语法规则,代码要执行具体的条件判断,条件判断的结果有两个:true 和 false,所以产生分支,按照不同的选择执行不同的代码。
JS语言提供了两种分支结构语句
-
if语句
-
switch语句
单分支
条件:条件可以是任何表达式,并且求值结果不一定是布尔值。JS会自动调用 Boolean()函数将这个表达式的值转换为布尔值。
语句:这里的语句可能是一行代码,也可能是一个代码块(即包含在一对花括号中的多行代码)。
//如果条件成立(条件为true)则执行语句,否则不执行
if (条件) {
语句
}
双分支
//如果条件成立(条件为true),则执行语句1;如果条件不成立(条件为false),则执行语句2;
//两个语句有且只能有一个执行
if (条件) {
语句1
} else {
语句2
}
三分支
//先判断条件1,如果条件1成立,则执行语句1;如果条件1不成立,
//则判断条件2,如果条件2成立,则执行语句2;否则,执行语句3
//有且只能执行一个语句
if (条件1) {
语句1
} else if (条件2) {
语句2
} else {
语句3
}
分支嵌套
单个if语句可以按照某一条件进行判断,如果有多个条件同时参与判断,此时可以使用嵌套if来解决。
使用分支嵌套解决多条件分支,通过外层语句和内层语句的协作,增强程序的灵活性。
分支语句之间可以嵌套:单分支、双分支、多分支之间可以相互嵌套。
if(条件1) {
if(条件2) {
代码块1
} else {
代码块2
}
} else {
代码块3
}
switch语句
switch 语句也是多分支语句,它用于基于不同的条件来执行不同的代码。当要针对变量设置一系列的特定值的选项时,就可以使用 switch。
-
关键字 switch 后面括号内可以是表达式或值, 通常是一个变量
-
关键字 case 后面跟具体的值(数字、字符串),值后面跟一个冒号,case的语句中要加 break
-
当表达式的取值与某个case后面的值相等时(值相等使用全等运算符===),会执行这个case中的代码;如果都不一致,会执行default中的代码
-
break:作用是这个case执行完成,用来结束整个switch语句,只要有一个case执行,其他case就不会执行
注意: 执行case 里面的语句时,如果没有break,则继续执行下一个case里面的语句,所以。case的语句中要加 break。
switch (表达式) {
case 目标值1:
语句1;
break;
case 目标值2:
语句2;
break;
…
default:
语句n + 1;
break;
}
if和switch区别
-
switch结构能实现的,if都能实现,但是if能实现的,switch不一定能实现。
-
如果遇到对常量的判断,为了使代码更简洁,优先使用switch选择。
-
If结构,可以用来做布尔值的判断、常量的判断和区间范围的判断,switch只能用来对常量进行判断。
相同点:都可以用于分支判断
不同点:
-
switch结构只能处理等值条件判断的情况
-
if结构适合某个变量处于某个连续区间时的情况
三目运算符
其又名三元运算符;类似分支结构的if…else。
表达式 ? 值1 : 值2;
var res = 2 > 3 ? "正确" : "不正确";
console.log(res);// 不正确
三元运算符也能嵌套:
var m = -6;
var res = m>0 ? '正数' : (m<0 ? '负数' : '零');//负数
for 循环
在程序中,循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
由循环体及循环的终止条件组成的语句,被称之为循环语句。
for用于创建循环结构,主要用于把某些代码循环若干次,其语法结构如下:
执行流程:
-
(1)首先执行【循环变量初始值】
-
(2)接着进行【循环条件】判断,若值=true,则执行循环体,改变【迭代循环变量】
-
(3)重复执行步骤(2),直到【循环条件】的值=false,立即结束循环;
for (循环变量初始值; 循环条件; 迭代循环变量){
循环体
}
-
循环变量初始值:一条或者多条语句,这些语句完成一些初始化操作。
-
比如:
var i = 0;
或者var i = 6;
或者var i = 0, j = 0;
循环变量初始值可以自由定制
-
-
循环条件:这是一个
boolean
表达式,这个表达式能决定是否执行循环体。如果表达式结果是 true 继续循环,否则退出循环。-
比如:
i < 10;
或者i > 0;
循环条件判断可以自由定制
-
-
迭代循环变量:这个部分在一次循环体结束后,下一次循环判断条件判断执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
-
比如:
i++;
或者i--;
或者i+=2;
迭代循环变量可以根据需要随意递增或者递减
-
-
循环体:这个部分是循环体语句,也就是我们要多次执行的代码。
// 基本使用
for (var i = 0; i < 10; i++) {
console.log(i);
}
// 把变量提取到外部使用
var i = 0;
for (; i < count; ) {
console.log(i);
i++;
}
//多变量使用
for(var i = 0, j = 0; i+j < 13; i++, j+=2){
console.log('i=',i,'j=',j);
}
while 循环
while 语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环。
// 基本格式
while (循环条件){
循环体;
}
// 扩展代码格式
循环变量初始值
while (循环条件){
循环体;
迭代循环变量; // 注意:不能缺少,否则造成死循环
}
执行流程:
-
(1)首先执行【循环变量初始值】
-
(2)接着进行【循环条件】判断,若值=true,则执行循环体,改变【迭代循环变量】
-
(3)重复执行步骤(2),直到【循环条件】的值=false,立即结束循环;
do…while 循环
do... while 语句其实是 while 语句的一个变体。该循环会先执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环。
// 基本格式
do{
循环体;
}while(循环条件);
// 扩展代码格式
循环变量初始值
do{
循环体;
迭代循环变量
}while(循环条件);
执行流程:
-
首先执行【循环变量初始值】,先执行一次【循环体】和改变【迭代循环变量】
-
接着进行【循环条件】判断,若值=true,则继续执行循环体,改变【迭代循环变量】
-
重复执行步骤(2),直到【循环条件】的值=false,立即结束循环;
循环嵌套及原理
嵌套循环是指在一个循环语句中再定义一个循环语句的语法结构,当一次循环不能满足实际需求时,可以使用嵌套循环; 在for循环语句中,嵌套一个for 循环,这样的 for 循环语句我们称之为双重for循环,还有三重嵌套循环结构等。
-
外层循环多用来控制次数;内层循环可以看做外层循环的循环体,所以,外层循环执行一次,内层循环要执行全部次数
-
内层循环执行的顺序也要遵循 for 循环的执行顺序
-
把双层循环看成一个表格,内层循环控制一行有多少单元格,外层循环控制有多少行
退出循环
continue 关键字用于立即跳出本次循环,继续下一次循环(本次循环体中 continue 之后的代码就会少执行一次)。
break 关键字用于立即跳出整个循环(循环结束)。
相同点:二者都用于循环,没有循环时,不要使用这两个关键字(switch中break除外)
注意:二者操作的都是当前循环,嵌套循环时对其他循环无影响