1 概念
流程控制就是来控制代码按照一定结构顺序来执行
主要有3种结构
- 顺序
- 条件
- 循环
程序的流程图, 可以通过使用processon在线编辑: ProcessOn
2 顺序
顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
3 条件
根据不同的条件,执行不同的路径代码(执行代码多选一的过程) 从而得到不同的结果
1) if语句
语法
// 条件成立执行代码,否则什么也不做
if (条件表达式) {
// 条件成立执行的代码语句
}
// 条件成立 执行 if 里面代码,否则执行else 里面的代码
if (条件表达式) {
// [如果] 条件成立执行的代码
} else {
// [否则] 执行的代码
}
示例
var age = prompt(‘请输入您的年龄:’);
if (age >= 18) {
alert(‘已成年’);
} else {
alert(‘未成年’);
}
if:
<script>
/* 语法
if(表达式){
语句体
}
表达式成立执行语句体,不成立就算了
*/
/* 请输入李凯钱包里的钱,有没有100块,有的话,中午请吃饭,没有就算了 */
var money = prompt('请输入李凯钱包里的钱')
//判断
if(money >= 100){
alert('中午请吃饭')
}
</script>
</body>
if else:
<script>
/* 语法
if(表达式){
语句体1
}else{
语句体2
}
表达式成立执行语句体1,不成立执行语句体2
*/
/* 请输入李凯钱包里的钱,有没有100块,有的话,中午请吃饭,没有放学别走 */
var money = prompt('请输入李凯钱包里的钱')
//判断
if(money >= 100){
alert('中午请吃饭')
}else{
alert('放学别走')
}
</script>
if else if:
<script>
/* 语法
if(表达式2){
语句体1
}else if(表达2){
语句体2
}else if(表达3){
语句体3
}
.....
else{
最终语句体
}
表达式1成立执行语句体1,如果1不成立,再表达式2,成立执行语句体2 ..... 最后都不成立 执行else
*/
/* 假设李凯今天带了1000元,那么完整的敲诈过程
先问他有没有500块 请吃大餐
400 中餐
300 快餐
200 小餐
100 泡面
<100 放学别走
*/
var money = prompt('请输入李凯钱包里的钱')
//判断
if(money >= 500){
alert('吃个大餐')
}else if(money >= 400){
alert('吃个中餐')
}else if(money >= 300){
alert('吃个快餐')
}else if(money >= 200){
alert('吃个小餐')
}else if(money >= 100){
alert('吃个泡面')
}else{
alert('放学别走')
}
/* 只会执行满足条件的那个语句体,其他的即使满足也不会执行 */
</script>
2) switch语句
switch 语句也是多分支语句,它用于基于不同的条件来执行不同的代码
当要针对变量设置一系列的特定值的选项时,就可以使用 switch
if主要用于范围的判断,swith主要用于等值
switch( 表达式 ){
case value1:
// 表达式 等于 value1 时要执行的代码
break;
case value2:
// 表达式 等于 value2 时要执行的代码
break;
default:
// 表达式 不等于任何一个 value 时要执行的代码
}
<script>
/*
switch( 表达式 ){
case value1:
// 表达式 等于 value1 时要执行的代码
break;
case value2:
// 表达式 等于 value2 时要执行的代码
break;
default:
// 表达式 不等于任何一个 value 时要执行的代码
}
*/
/* 判断一个数是奇数还是偶数 */
var num = prompt('请输入一个整数')
//判断
switch(num%2){
case 1:
alert('奇数')
break
case 0:
alert('偶数')
break
default:
alert('你输入的不是一个整数')
break
}
</script>
switch穿透
case value# 后不用break断开, 则会一直执行代码, 直到有break时为止.
可以发挥穿透的作用, 减少一定量的代码<br />如: "四季"的运用
<script>
/*
需求:从弹框中输入月份,弹出对应的季节 12 1 2 冬季 3 4 5 春节
*/
var num = prompt('请输入一个月份')
//判断
switch(num){
case '12':
case '1':
case '2':
alert('冬季')
break
case '3':
case '4':
case '5':
alert('春季')
break
case '6':
case '7':
case '8':
alert('夏季')
break
case '9':
case '10':
case '11':
alert('秋季')
break
default:
alert('你输入的月数有误')
break
}
</script>
4 循环
重复多次执行有规律的代码, 可以使用循环来表示, 通过一个变量可以记录第几次循环, 已经循环的总次数
1) for循环
一般语法
for(初始化变量; 条件表达式; 操作表达式 ){
//循环体
}
<script>
/*
重复的代码比较多,不简洁
技术含量低,容易被歧视
不利于统计次数,不利于修改代码
使用循环解决
for(初始化语句;条件判断语句;循环增量语句){
循环体语句;
}
*/
for(var i = 0;i < 66;i++){
console.log("班主任666");
}
</script>
示例
// 基本写法
for(var i = 1; i <= 10; i++){
console.log('媳妇我错了~')
}
// 用户输入次数
var num = prompt('请输入次数:')
for (var i = 1 ; i <= num; i++) {
console.log('媳妇我错了~')
}
示例
累加求和
var sum = 0
for(var i=1; i<=10; i++) {
sum += i
}
console.log(sum)
练习
提示用户输入两个数, 计算累加求和
var num1 = parseInt(prompt('请输入第一个数'))
var num2 = parseInt(prompt('请输入第二数'))
var sum = 0
for (var i = num1; i <= num2; i++) {
sum += i
}
alert('从' + num1 + '到' + num2 + '的和是: ' + sum)
双重循环
在for循环中, 可以使用if和for循环
<script>
/*
☆☆☆
☆☆☆
☆☆☆
*/
/*
方式一:
console.log('☆☆☆\n☆☆☆\n☆☆☆\n');
*/
//方式二 循环打印3次 ☆☆☆\n
/*
//这种,控制台会自动折叠,没有达到期望的效果
for(var i = 0 ;i < 3;i++){
console.log('☆☆☆\n');
}
*/
/*
var str = ''
for(var i = 0 ;i < 3;i++){
str += '☆☆☆\n';
}
console.log(str);
*/
//方式三:把里面的☆☆☆\n的也用循环实现
var str = ''
for(var i = 0 ;i <8;i++){ //外层控制行数
for(var j = 0;j < 2;j++){ //内层控制列数
str += '☆'
}
str += '\n';
}
console.log(str);
/* 外层循环一次,内层要循环所有次 */
</script>
<script>
/*
求 1-10 中奇数和 偶数的和
*/
var sum1 = 0 //奇数
var sum2 = 0 //偶数
for(var i = 1;i <= 10;i++){
if(i%2 == 0){
sum2+=i
}else{
sum1 += i
}
}
console.log(sum1);
console.log(sum2);
</script>
示例
分别求1~100的奇数和, 偶数和
var even = 0;
var odd = 0;
for (var i = 1; i <= 100; i++) {
if (i % 2 == 0) {
even = even + i;
} else {
odd = odd + i;
}
}
console.log('1~100 之间所有的偶数和是' + even);
console.log('1~100 之间所有的奇数和是' + odd);
示例
打印3行3列的星星
var star = '';
for (var j = 1; j <= 3; j++) {
for (var i = 1; i <= 3; i++) {
star += '☆'
}
// 每次满 3个星星 就 加一次换行
star += '\n'
}
console.log(star);
练习
打印n行m列的星星
// 打印n行m列的星星
var rows = prompt('请您输入行数:');
var cols = prompt('请您输入列数:');
var str = '';
for (var i = 1; i <= rows; i++) {
for (var j = 1; j <= cols; j++) {
str = str + '★';
}
str += '\n';
}
console.log(str);
示例
打印9*9乘法表
var str = '';
for (var i = 1; i <= 9; i++) { // 外层循环控制行数
for (var j = 1; j <= i; j++) { // 里层循环控制每一行的个数 j <= i
str += j + '×' + i + '=' + i * j + '\t';
}
str += '\n';
}
console.log(str);
2) while循环
while 基础语法
while (条件表达式) {
// 当...条件满足时, 一直执行循环体
// 循环体代码
}
while基础格式:
<script>
/* 最基础的格式
while (条件表达式) {
// 当...条件满足时, 一直执行循环体
// 循环体代码
}
写一个最简单的死循环 浏览器控制台进不去,因为一直在循环打印
*/
while(true){
console.log("班主任666");
}
</script>
while完整格式:
<script>
/* 完整格式
初始化语句
while (条件判断语句) {
循环体语句
循环增量语句
}
打印66句666
*/
var i = 0
while(i < 66){
console.log("班主任666");
i++
}
</script>
do…while
do {
// 循环体代码 - 条件表达式为 true 时重复执行循环体代码
} while(条件表达式);
当条件满足时, 执行
跟while 的区别是:
do…while不管条件是否成立会先执行一次, 都会先执行一次循环体, 再判断
<script>
/*
基础格式
do{
循环体
}while(表达式)
*/
/* 完整格式
初始化语句
do{
循环体语句
循环增量语句
}while (条件判断语句)
打印66句666
*/
/* 跟while循环的区别
dowhile不管条件是否成立,都会执行一次循环体
*/
var i = 0
do{
console.log("班主任666");
i++
}while(i < 66)
</script>
示例 :
<script>
/* 反复循环,你爱我吗?1/0 只要回答的不是1,就一直问,直到回答的是1为止
分析:循环次数不确定使用while循环
循环体:一问一答:可以使用prompt实现
循环条件:当回答不是1的时候
步骤
1,先把循环的架子搭起来
2,写循环体
3,更改循环条件
*/
var b = '0' //把结果提出来.并赋默认值0
while(b != '1'){
//一问一答
b = prompt('你爱我吗?1/0')
}
alert('我也爱你,么么哒')
</script>
3) for / while应用场景
区别
while和for
都是先判断条件,在执行循环体
do-while
不管条件是否成立,都会先执行一次循环体
应用场景
循环次数确定的话,建议使用for循环,结构简单
循环次数不确定的话,建议使用while循环
4) 跳出循环
continue: 跳出当前循环,继续下一个循环
示例
for (var i = 1; i <= 5; i++) {
if (i == 3) {
console.log('这个包子有虫子,扔掉');
continue; // 跳出本次循环,跳出的是第3次循环
}
console.log('我正在吃第' + i + '个包子呢');
}
<script>
/*
continue:跳过某次循环体内容的执行
注意:只能用在循环体里面,基于条件控制
需求:模拟电梯上行的过程1-11层,7层不停
*/
for(var i=1;i <= 11;i++){
if(i == 7){
continue
}
console.log(i + '层到了~');
}
</script>
break: 跳出整个循环(终止当前循环)
示例
for (var i = 1; i <= 5; i++) {
if (i == 3) {
console.log('发现半条虫子,再也吃不下了');
break; // 直接退出整个for 循环,跳到整个for下面的语句
}
console.log('我正在吃第' + i + '个包子呢');
}
<script>
/* 反复循环,你爱我吗?1/0 只要回答的不是1,就一直问,直到回答的是1为止
1,直接写一个死循环
2,使用break跳出循环
*/
while(true){
//一问一答
var b = prompt('你爱我吗?0/1')
//跳出循环
if(b == '1'){
break
}
}
alert('我也爱你.么么哒!')
</script>