04-JavaScript流程控制

04-流程控制


1.代码块

1).我们的程序是由一条一条语句构成的,语句是按照自上向下的顺序一条一条执行的
在JS中可以使用{}来为语句进行分组:
同一个{}中的语句我们称为是一组语句,
同一个代码块中的代码,就是同一组代码,它们要么都执行,要么都不执行,
一个{}中的语句我们也称为叫一个代码块,在代码块的后边就不用再编写;了

{ let a=20; }

2).使用 {} 来创建代码块,代码块可以用来对代码进行分组,

let和var:
-在JS中,使用let声明的变量具有块作用域,在代码块中声明的变量无法在代码块的外部访问
-使用var声明的变量,不具有块作用域,JS中的代码块,只具有分组的的作用,没有其他的用途,代码块内部的内容在外部是完全可见的

{var a = 10;let a=10;
 alert("你好");
}
console.log(a);

image-20230208150004257image-20230208150113678

JS中的程序是从上到下一行一行执行的
-通过流程控制语句可以控制程序执行流程,使程序可以根据一定的条件来选择执行
-语句的分类:

①.条件判断语句
②.条件分支语句
③.循环语句

2.条件判断语句

-使用条件判断语句可以在执行某个语句之前进行判断,如果条件成立才会执行语句,条件不成立则语句不执行。

1).if语句

语法一:
  if(条件表达式){
     语句......
   }
执行流程:
		if语句在执行会先对if后的条件表达式进行求值判断,如果结果为true,则执行if后的语句,如果为false,则不执行

-if语句只会控制紧随其后其后的那一行代码,如果希望可以控制多行代码,可以使用{}将语句扩起来
-最佳实践:即使if后只有1行代码,我们也应该编写代码块,这样结构会更加的清晰
-如果if后的添加表达式不是布尔值,会转换为布尔值然后再运算

var a=15;
if(a>10 && a<=20){
 alert("a大于10,并且a小于等于20");
}
if(100){
 alert("你猜我执行吗?");
}    

语法二:
if(条件表达式){
 语句...
}else{
 语句...
}
执行流程:
if...else...语句
	当该语句执行时,会先对if后的条件表达式进行求值判断,如果该值为true,则执行if后的语句,如果该值为false.则执行else后的语句
if(age>=60){
 alert("你已经退休了");
}else{
 alert("你还没退休");
}

语法三:
if(条件表达式){
 语句...
}else if(条件表达式){
 语句...
}else if(亲件表达式){
 语句..
}else{
 语句...
} 
执行流程:
	if-else if-else语句,会自上向下依次对if后的条件表达式进行求值判断,
		如果条件表达式结果为true,则执行当前if后的语句,执行完毕语句结束
		如果条件表达式结果为false,则继续向下判断,直到找到true为止
		如果所有的条件表达式都是false,则执行else后的语句
注意:
if-else if-else语句中只会有一个代码块被执行,一旦有执行的代码块,下边的条件都不会在继续判断,所以一定要注意条件的编写顺序
var age=50;
if(age > 100){
 alert("活着挺没意思的~~");
}else if(age > 80){
 alert("你也老大不小的了~~" );
}else if(age > 60){
 alert("你也退休了~~");
}else if(age > 30){
 alert("你已经中年了~~");
}else if(age > 17){
 alert("你已经成年了");
}else{
 alert("你还是个小孩子~~");
}

练习①:

//判断值是否合法
var score = prompt("请输入小明的期末成绩(1-100分):");
/*
prompt()可以弹出一个提示框,该提示框中会带有一个文本框,
      用户可以在文本框中输入一段内容,该函数需要一个字符串作为参数,该字符串将会作为提示框的提示文字
      用户输入的内容将会作为函数的返回值返回,可以定义一个变量来接受该内容
*/
if(score>100 || score<0 || isNaN(score)){
    alert("输入值不合法!");
}else{
    if(score==100){
        alert("奖励一辆BMW");
    }else if(score>=80){
        alert("奖励一台iPhone15s");
    }else if(score>=60){
        alert("奖励一本参考书");
    }else{
        alert("奖励一个大比斗");
    }
}

练习②:

var tall=prompt("请输入您的身高(cm):");
var rich=prompt("请输入您的财富(万):");
var hand=prompt("请输入您的颜值(px):");
alert(tall+"--"+rich+"--"+hand);
if(tall>=180 && rich>=1000 && hand>=500){
    alert("我一定要嫁给他!");
}else if(tall>=180 || rich>=1000 || hand>=500){
    alert("嫁吧,比上不足,比下有余");
}else{
    alert("不嫁!");
}

练习③:

// 获取用户输入的三个值
// prompt()函数的返回值是string类型的
var num1=+prompt("请输入数字1:");
var num2=+prompt("请输入数字2:");
var num3=+prompt("请输入数字3:");
alert(num1+"--"+num2+"--"+num3);
if(num1<num2&& num1<num3){
    if(num2<num3){
        alert(num1+","+num2+","+num3)
    }else{
        alert(num1+","+num3+","+num2)
    }
}else if(num2<num1 && num2<num3){
    if(num1<num3){
        alert(num2+","+num1+","+num3)
    }else{
        alert(num2+","+num3+","+num1)
    }
}else{
    if(num1<num2){
        alert(num3+","+num1+","+num2)
    }else{
        alert(num3+","+num2+","+num1)
    }
}

3.条件分支语句

条件分支语句也叫switch语句

语法:
switch(条件表达式){
 case表达式:
     语句...
     break;
 case表达式:
     语句...
     break;
 default:
     语句...
     break;
}
执行流程:
switch. ..case..语句
	语句在执行时,会依次将switch后的表达式和case后的表单式进行全等比较
		如果比较结果为true,则自当前case处开始执行代码
		如果比较结果为false,则继续比较其他case后的表达式,直到找到true为止 
		如果所有的比较结果都为false,则只执行default后的语句

switch语句和if语句的功能实际上有重复的,使用switch可以实现if的功能,同样使用if也可以实现switch的功能,所以使用时,可以根据自己的习惯选择。

注意:
	当比较结果为true时,会从当前case处开始执行代码,也就是说case是代码执行的起始位置
	这就意味着只要是当前case后的代码,都会执行可以使用break来避免执行其他的case
//根据num的值,输出对应的中文
var num=1; 
switch(num){
 case 1:
     console.log("壹~");
     // 使用break可以来退出switch语句
     break;
 case 2:
     console.log("贰~");
     break;
 default:
     console.log("非法数字~~");
}
//对于成绩大于60分的,输出‘合格’。低于60分的输出‘不合格’
var score=55;
var num=(score>60);
switch(num){
 case true:
     console.log("合格");
     break;
 default:
     console.log("不合格");
}
//从键盘接收整数参数,如果该数为1-7,打印对应的星期,否则打印非法参数
var day=Number(prompt("输入数字:"));
console.log(typeof day);
switch(day){
 case 1:
     console.log("星期一");
     break;
 case 2:
     console.log("星期二");
     break;
 case 3:
     console.log("星期三");
     break;
 case 4:
     console.log("星期四");
     break;
 case 5:
     console.log("星期五");
     break;
 case 6:
     console.log("星期六");
     break;
 case 7:
     console.log("星期日");
     break;
 default:
     console.log("非法参数!");    
}

4.循环语句

-循环语句:通过循环语句可以反复的执行一段代码多次
-JS中一共有三种循环语句:

①.while循环
②.do...while循环
③.for循环

1).while循环

语法:
	while(条件表达式){
 		语句...
	}
执行流程: 
    while语句在执行时,会先对条件表达式进行判断,
        如果结果为true,则执行循环体,执行完毕,继续判断
        如果为true,则再次执行循环体,执行完毕,继续判断,
        如此重复直到条件表达式结果为false时,循环结束
注意:
//向页面中输出连续的数字
var n=1;
//向这种将条件表达式写死为true的循环,叫做死循环
//该循环不会停止,除非浏览器关闭,死循环在开发中慎用
//可以使用break,来终止循环
while(true){
 alert(n++);
 if(n==10){
     // 退出循环
     break;
 }
}

通常编写一个循环,要有三个要件:

1.初始化表达式	(初始化变量)
2.条件表达式		 (设置循环运行的条件)
3.更新表单式	      (修改初始化变量)
// 创建一个循环,往往需要三个步骤
// 1.创建初始化一个变量
var i=1;
// 2.在循环中设置一个条件表达式

while(i<11){
 alert(i);
 // 3.定义一个更新表达式,每次更新初始化变量
 i++;
 document.write(i++ +"<br/>");
}

练习①:

//假如投资的年利率为5%,试求从1000块到5000块需要多久?
//    定义一个变量,表示当前的钱数
var money=1000;
//    定义一个计数器
var count=0;
//    定义一个while循环来计算每年的钱数
while(money<5000){
 money*=1.05;
 //使计数器count自增
 count++;
}
document.write("一共需要"+count+"年");

练习②:

//判断输入的值是否合法
//将prompt放入到一个循环中    
while(true){
 var score=prompt("请输入小明的期末成绩(0-100):");
 // 判断用户输入的值是否合法
 if(score>=0&&score<=100){
     // 满足该条件则证明用户的输入合法,退出循环
     break;
 }
 alert("请输入有效的分数!");
}  

2).do…while循环

语法:
    do{
     	语句...
    }while(条件表达式)
执行流程:
do. . .while语句在执行时,会先执行循环体,
	循环体执行完毕以后,在对while后的条件表达式进行判断,
	如果结果为true,则继续执行循环体,执行完毕继续判断以此类推,如果值为false,则终止循环 
do{
 	document.write(i++ +"<br/>");
}while(i<=10)
console.log(i);

while语句和do…while语句的区别:
实际上这两个语句功能类似,不同的是while是先判断后执行,而do. …while会先执行后判断,
do. …while可以保证循环体至少执行一次,而while不能

var i = 10;do {
 i += 2;
} while (i < 10)while (i < 10) {
  i += 2
}
console.log(i);

image-20230208164226641image-20230208164159186

3).for循环

for语句,也是一个循环语句,也称为for循环
for循环和while没有本质区别,都是用来反复执行代码,不同点就是语法结构,for循环更加清晰

在for循环中,为我们提供了专门的位置用来放三个表达式:
                                                1.初始化表达式
                                                2.条件表达式
                                                3.更新表达式
语法:
 for(①初始化表达式;②条件表达式;④更新表达式){
     ③语句...
 }
执行流程:
     ①执行初始化表达式,初始化变量
     ②执行条件表达式,判断循环是否执行(true执行,false终止)
     ③判断结果为true,则执行循环体
     ④执行更新表达式,对初始化变量进行修改
     ⑤重复②,直到判断为false为止
for(var i=0;i<10;i++){
             alert(i);
        }

初始化表达式,在循环的整个的生命周期中只会执行1次

①.for循环中的三个部分都可以省略,也可以写在外部:

var i=0;
for(;i<10;){
 alert(i++);
}

②.如果在for循环中不写任何的表达式,只写两个,此时循环是一个死循环会一直执行下去,慎用

for(;;){
 alert("hello");
}

③.使用 let 在for循环的 () 中声明的变量是局部变量,只能在for循环内部访问,使用 var 在for循环的 () 中声明的变量,可以在for循环的外部访问

创建死循环的方式:
 while(1){}
 for( ;;){}
a.嵌套的for循环

练习①:

在页面输出以下图形
                 *
                 **
                 ***
                 ****
                 *****
for(var i=0;i<5;i++){
    //外部for循环执行1次,内部的循环就会执行i次 
    //内部的for循环执行几次,图形的宽度就是多少
    for(var j=0;j<1+i;j++){
        // for(var j=0;j<5-i;j++){		//相反的图形
        document.write("* ");
    }
    document.write("<br/>");
}

练习②:

打印99乘法表

for(var i=1;i<10;i++){
    for(var j=1;j<i+1;j++){
        document.write("|"+j+"*"+i+"="+i*j );
    }
    document.write("<br/>");
} 

练习③:

打印2-100之间所有的质数

for(var i=2;i<=100;i++){
    // 创建一个布尔值,用来保存结果,默认i是质数
    var flag=true;
    // 判断i是否是质数
    // 获取2-i之间的所有数
    for(var j=2;j<i;j++){
        // 判断i是否能被j整除
        if(i%j==0){
            // 如果进入判断则证明i不是质数
            flag=false;
        }
    }
    // 如果是质数,则打印i的值
    if(flag){
        document.write(i+"<br/>");
    }
}
b.break和continue
①.break

-break用来终止switch和循环语句
-break执行后,当前的switch或循环会立刻停止
-break会终止离他最近的循环

for(var i=0;i<5;i++){
 document.write("@外层循环"+i+"<br/>");
 for(var j=0;j<5;j++){
     break;
     document.write("@内层循环"+j+"<br/>");
 }
}

image-20230208170650794

②.label

可以为循环语句创建一个label,来标识当前的循环
使用break语句时,可以在break后跟着一个label,这样break将会结束指定的循环,而不是最近的

outer:
for(var i=0;i<5;i++){
 document.write("@外层循环"+i+"<br/>");
 for(var j=0;j<5;j++){
     break outer;
     document.write("@内层循环"+j+"<br/>");
 }
}    

image-20230208170905659

③.continue

-continue用来跳过当次循环
-同样continue也是默认只会对离他最近的循环循环起作用

for(var i=0;i<5;i++){
 if(i==2){
     continue;
 }
 document.write(i+"<br/>");
}

image-20230208171038562

for(var i=0;i<5;i++){
 for(var j=0;j<5;j++){
     if(j==1){
         continue;
     }
     document.write("--->"+j+"<br/>");
 }
 document.write("@--->"+i+"<br/>");
}

image-20230208171141877

c.质数练习

在页面中接收一个用户输入的数字,并判断该数是否是质数。
质数:只能被1和它自身整除的数,1不是质数也不是合数,质数必须是大于1的自然数。

写法①:

var num=prompt("请输入一个大于1的整数"); 
if(num<=1){
    alert("该值不合法");
}else{
    //判断一个变量来保存当前的状态
    // 默认当前num是质数
    var flag=true;
    // 判断num是否是质数
    // 获取2-num之间的数
    for(var i=2;i<num;i++){
        //判断num是否能被i整除
        if(num%i==0){
            // 如果num能被i整除,则说明num一定不是质数
            // 设置flag为false
            flag=false;
        }
    }
    // 如果num是质数则输出
    if(flag){
        alert(num+"是质数");
    }else{
        alert(num+"不是质数");
    } 
}

写法②:

测试如下的程序的性能:
在程序执行前,开启计时器
console.time()可以用来开启一个计时器,它需要一个字符串来作为参数,这个字符串将会作为计时器的标识

//  打印1-100之间所有的质数
for(var i=2;i<=100;i++){
    var flag=true;
    // 判断i是否是质数
    // 获取2-i之间所有的数
    for(var j=2;j<=Math.sqrt(i);j++){
        //判断i是否能被j整除
        if(i%j==0){
            // 如果j能被i整除,则说明j一定不是质数
            flag=false;
            //一旦进入判断,则证明i不可能是质数了,此时循环再执行已经没有任何意义
            //使用break来结束循环
            break;
        }
    }
    if(flag){
        document.write(i+"<br/>");
    }
}
console.timeEnd("test");

​ 终止计时器
​ console.timeEnd()用来停止一个计时器,需要一个计时器的名字作为参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值