流程控制:控制代码执行的过程。
在任何的语言中,流程控制部分分为三类:
1.顺序执行。 从上到下依次执行。
2.分支选择:
- 根据条件,有选择的执行某些代码,跳过某些代码。
if:单分支
if-else:双分支
if-else if....else:多分支
switch:多分支
3.循环:
- 反复执行某些代码。
while
do-while
for
分支选择
if语句
if单分支选择语句
- 语法:
if(条件){
//任意的js代码 if代码块
}
- 解释:
if是js的关键字。
小括号必须要有
条件:要求是一个boolean表达式,返回值为boolean。
如果条件返回的不是boolean值,那么 js底层会进行隐式的类型转换,转换为boolean值。
一对大括号:里面是任意行的js代码。
- 执行过程:
1.首先判断if后的条件的返回值。
2.如果返回值为true,那么就执行if 代码块。 然后执行后续的内容。
3.如果返回为false,那么就跳过if代码块,执行后续的内容。
- 注意:
- if是一个单分支选择语句,被选择执行的语句,根据条件是否成立,选择执行或者不执行。
- 如果if代码块中只有一条js代码。可以省略大括号。 如果是多条js代码,那么必须使用大括号包裹。
- if后的条件的小括号后,不能添加
;如果添加了分号,那么条件控制的是否执行的代码 就是分号。而不是后面的大括号中的内容了。
if-else双分支选择
- 语法:
if(条件){
//if 代码块
}else{
//else代码块
}
- 解释:
条件:和if中的条件一致。
else:是js中的一个关键字。否则的意思。
else后的大括号:里面是任意的js代码。
- 执行过程:
1.先计算条件。必须返回一个布尔值,可能存在隐式的转换。
2.如果条件返回的结果为true,那么就执行if代码块。而不执行else代码块。
3.如果返回的结果为false,那么就跳过if代码块,执行else代码块中的内容。
- 注意:
1.if可以单独使用。else 不能单独存在,必须和某一个if 配对使用。
2.if 代码块和else代码块中的内容,如果只有一行js代码,可以省略大括号。
3.不要在条件小括号后添加分号,else就没有配对的if了。报错了。
4.if 和 else之间,要么是一条js代码,要么是一个if代码块。
5.if-else 双分支。这两个分支是条件互斥的。两个分支执行且必须执行其中的一个分支。
if-else if..else 多分支选择语句
- 语法:
if(条件-1){
//代码块-1
} else if(条件-2){
//代码块-2
} else if(条件-3){
//代码块-3
} ...... else{
代码块-n
}
- 执行过程:
1.先判断 条件-1,如果成立,执行 代码块-1。后续的所有的分支都被跳过。
2.条件-1 不成立。继续判断 条件-2.成立执行对应的代码块,不成立,继续判断后续的条件。
3.一次类推,只要有一个条件成立了,就执行对应的代码块,其他的代码块都被跳过。
4.如果所有的条件都不成立,那么执行最后的else 的代码块。
- 注意:
1.如果代码块中的内容为一条js代码,大括号可以省略。
2.这些所有的分支的条件理论上应该是互斥的。不应该存在重叠的条件。
3.每个else 都和它前面的距离它最近的if 配对。
4.if-else 多分支,执行且仅能执行其中的一个分支。
5.最后的else可以不写。取决于业务的要求。如果最后的else没有,那么这么多的分支可能 一个都不执行。如果前面的所有的条件都不成立,那么就都不执行。
switch-case语句
switch-case 多分支选择
- 语法:
switch(变量表达式){
case 常量表达式-1:
代码块-1
break;
case 常量表达式-2:
代码块-2
break;
case 常量表达式-3:
代码块-3
break;
.....
default:
代码块-n
break;
}
- 解释:
switch:js关键字,开关的意思。
小括号中的变量表达式:包含变量的表达式。
后面是一对大括号。大括号中有若干对 case-break 结构体。
case: 后通常是常量表达式
代码块:任意行js代码分支语句。
break:js关键字。后面直接跟分号即可。
- 执行过程:
1.首先计算 switch后的变量表达式的结果。
2.然后从上到下依次计算每个case 后的常量表达式计算的结果。
然后依次和switch变量表达式计算的结果进行等值比较。
比较是否相等。
如果和某一个case 后的值相等,那么就执行对应的 代码块的内容。
如果不相等,就继续比对下一个case 后的值。
3.如果某一个case 相等了,那么就执行里面的内容,遇到break, 直接结束整个switch语句。
4.如果和每个case后的值都不相等,那么就执行default后的代码块。
- 注意:
1.每个case后的常量表达式的值应该是不同的。
2.多少个case 取决于业务的要求,没有数量的限制。
3.每个case 后的break,都是可以没有的。取决于业务的需求。
如果执行了case后需要结束switch,那就需要添加break。
4.default:是可选择添加的。根据业务要求。
5: 该机制只且最多比对相等一次。
break:在switch语句中的作用
就是用来结束switch语句的。
如果执行了case后的代码,但是case后没有break,那么后面的所有的case都将被继续执行。
直到遇到了一个break,才会结束switch。
石头剪刀布
/* * Rock 石头 * Paper 布 * Scissors 剪刀 * */
const ROCK = 0; const SCISSORS = 1; const PAPER = 2; //computer电脑
let computerInput = ~~(Math.random() * (PAPER + 1 - ROCK) + ROCK);
let playerInput = parseInt(prompt('请输入石头剪刀布', '0代表石头,1代表剪刀,2代表布')); //用玩家的输入,进入switch语句判断输赢
switch (playerInput) {
case ROCK:
if (computerInput === ROCK) {
console.log('玩家出的石头,电脑出的石头,两者平局');
} else if (computerInput === SCISSORS) {
console.log('玩家出的石头,电脑出的剪刀,玩家胜');
} else if (computerInput === PAPER) {
console.log('玩家出的石头,电脑出的布,电脑胜');
}
break;
case SCISSORS:
if (computerInput === ROCK) {
console.log('玩家出的剪刀,电脑出的石头,电脑胜');
} else if (computerInput === SCISSORS) {
console.log('玩家出的剪刀,电脑出的剪刀,两者平局');
} else if (computerInput === PAPER) {
console.log('玩家出的剪刀,电脑出的布,玩家胜');
}
break;
case PAPER:
if (computerInput === ROCK) {
console.log('玩家出的布,电脑出的石头,玩家胜');
} else if (computerInput === SCISSORS) {
console.log('玩家出的布,电脑出的剪刀,电脑胜');
} else if (computerInput === PAPER) {
console.log('玩家出的布,电脑出的布,两者平局');
}
}
多分支选择语句的使用选择
1.if-esle多分支:
既可以进行等值比较,也可以进行不等值的区间的比较。
2.switch case :只能进行等值比较。
switch case 能实现的,if-else一定可以实现。
循环
while循环
- 语法:
while(循环条件){
//循环体
}
- 解释:
while:关键字
循环条件:布尔表达式,返回一个布尔值。如果不能返回一个布尔值, 那么就需要隐式转换。
大括号中是需要反复执行的代码块。
- 执行过程:
1.先判断循环条件,如果是true,那么就执行循环体。
然后执行完循环体,
再继续判断循环条件 成立,继续执行循环体,
直到循环条件为false,那么立即结束循环。
2.如果一开始循环条件就是false,那么循环体一次都不执行。
4. 注意:
- 如果循环体就一句代码,那么可以省略大括号。
- 千万不要在循环条件后添加
;号。如果加了,循环体就是分号了。
5. 循环结构的构成:
1.循环控制部分
a:循环条件初始化
b:循环条件
c:迭代(改变循环条件部分)
2.循环体
do-while循环
- 语法:
do{
//循环体
}while(循环条件);
- 执行过程:
1.先执行一次循环体。然后再进行条件的判断。
2.如果条件成立,继续执行循环体,周而复始。
3.直到循环条件为false,结束整个循环。
do-while的事情的情形:
如果循环条件的判断要依赖于一次循环的执行可以使用do-while
总结:while和do-while的区别
- 语法不同
- while先进行条件的判断,然后在执行循环体。
- do-while先执行循环体,然后再进行循环条件的判断。
- 【while有可能一次循环体都不执行。do-while至少执行一次循环】
for循环
- 语法:
for(循环条件初始化; 循环条件 ; 迭代){
循环体
}
- 执行过程:
1.循环条件初始化:执行且仅执行一次。最先被执行。
2.进行循环条件的判断。成立,执行循环体,然后执行 迭代部分。
然后再进行条件的判断,循环体,迭代,周而复始。直到循环条件为false
立即结束循环。
- 注意:
1.初始化部分可以同时初始化多个变量,迭代部分,可以同时迭代多个变量。
循环条件只要返回一个布尔值即可。
2.for循环的小括号内使用2个分号分隔成了3部分。这三部分的内容都可以没有,但是2个分号是必不可少的。
3: 如果循环条件不写,意味着循环条件永远为真。
循环的选择
1:如果循环的次数是固定的,通常使用for
2:如果循环的次数不固定,通常使用while
break 和 continue
break
- 语法:
break;
- js 的关键字
- break 只能在 switch 中 和 循环体中使用。
- 在swtich中,用来结束switch语句的。
- 在循环体中使用,用来结束当前循环的。只能结束一层循环。
continue
- 语法:
continue;
-
js的一个关键字。
-
只能在循环体中使用。
-
作用:用来跳过本次循环,继续下次循环。
-
while、do-while的循环体中使用continue。
continue后续循环体中的代码将被跳过,去到下次循环条件的判断处去执行。
-
for 循环体中使用,会跳过continue 后续的代码,跳到迭代处去执行。
分支的选择嵌套
单分支if
双分支 if-else
多分支 等等`
- 有嵌套的需求:
那么嵌套的深度不要太深,不建议超过3层。
循环的嵌套:循环体中包含了其他的循环。
- 嵌套循环的特点:
1.外层循环迭代一次,内层循环执行一遍。
2.内层循环体执行的次数 等于 ,每一层循环执行的次数的乘积。
- 关于使用率:
单层循环使用最多。双层的使用一般般。三层很少使用。