week1.3流程控制语句
选择结构
if
if...else结构体和三元表达式的功能是很像的,但是我们需要注意的是三元表达式中只能写入表达式或者值,而if...else语句中可以写入多条语句或者其他的功能性代码。功能类似但是不能等同!
if ( 条件 ){
语句 //条件为true时执行该语句
}else{
语句 //条件为false时执行该语句
}
if(10=='10'){console.log('条件为true我执行');// 执行}else{console.log('条件为false我执行');// 不执行}
if( 条件1 ){
语句1 //条件1为真时执行语句1
}else if(条件2){
语句2 //条件1为假,条件2为真时执行语句2
}else if(条件3){
语句3 //条件1为假,2为假,3为真时执行语句3
}else{
语句4 //上面都为假时执行语句4
}
嵌套if
// 需求: 体育考试,男生:罚十个球进了5个以上的及格,女生:罚十个球进了3个以上的及格var gender = prompt('请输入您的性别');var score = +prompt('请输入您的得分');
?if( gender === 'male' ){// 男性if( score >= 5 ){console.log('及格');}else{console.log('不及格');}}else{// 女性if( score >= 3 ){console.log('及格');}else{console.log('不及格');}}
switch
Switch结构和if...else if...else结构非常像,它们都能够进行对变量的多次判断并给出相应的处理方案。
switch(变量名){
}
需求:小明为手机设置了快速拨号功能,按1给父亲打电话,按2给母亲打电话,按3给朋友打电话,按4给110打电话
// 多重if结构实现 var callNum = Number(prompt());if (callNum==1) {console.log('打给父亲');}else if(callNum==2){console.log('打给母亲');}else if(callNum==3){console.log('打给朋友');}else if(callNum==4){console.log('快打110!!!');}else{console.log('其他的号码随便打');}
?
?// 使用switch结构实现var callNum = Number(prompt());switch(callNum){case 1:console.log('打给父亲');break;case 2:console.log('打给母亲');break;case 3:console.log('打给朋友');break;case 4:console.log('快打110!!!');break;default:console.log('其他的号码随便打');}
从上面的代码中我们可以看出对于变量的等值判断switch结构要比if结构清晰并且写起来更加舒服。
在switch语句中有一个default选项,它的执行逻辑和if语句中的else部分是一样的,default选项一定是等到其他的部分判断结束之后才会执行。default部分的书写顺序不是固定的,如果你愿意你也可以将default部分放在switch语句的顶部。不过也要在该部分之后放一个break关键字。
在switch语句中break是必须的,如果缺失了break就会发生switch穿透。
switch穿透是指当switch语句中某一个case被匹配到并且该case下的语句会被执行,当case部分逻辑执行完毕之后如果没有break的话就会一直往下一个case匹配。
也就是说在switch语句中当case被匹配到,程序只有遇到break才会跳出switch。
多重if和switch区别
多重if和switch区别?
前者用于范围判断,后者用于等值判断
循环结构
while
循环操作用于执行重复的操作,它拥有多种形式。而无论是哪一种形式其实都离不开四个组成部分:
1,循环变量:通常作为条件出现
2,条件判断:循环是否执行的依据
3,循环操作:重复执行的部分
4,更新变量:防止循环成为死循环,跳出循环体的重要组成部分
while(条件){
// 循环体
}
var num = 1;// 初始化循环变量
while(num <= 100){// 循环变量
// 循环体
console.log('第'+num+'次输出:hello world!');
// 更新变量
num++;
}
do-while
/*do{}while( 条件 )*/var sum1 = 0;var num1 = 11;while( num1<=10 ){sum1+=num1;num1++;}console.log( sum1 );
?var sum2 = 0;var num2 = 11;do{sum2+=num2;num2++;}while( num2<=10 )console.log( sum2 );
区别
while 和 do..while循环的区别?
while是先判断,再执行,如果条件不满足,一次都不会执行
do...while是先执行,再判断,至少都会执行一次
for
/*for( 声明循环变量;循环条件;更新循环变量 ){// 循环体...}*/var num = 1;while( num<=100 ){console.log( '第'+num+'次:好好学习,天天向上' );num++;}// 使用for循环打印100次,好好学习,天天向上for( var num = 1;num<=100;num++ ){console.log( '第'+num+'次:好好学习,天天向上' );}
嵌套循环
允许我们进行循环之间的相互嵌套,而循环之间的嵌套也能帮助我们完成一些带有特定层级关系的业务。
需求:录入学生的成绩。共有三个班级,记录每个班级四名学生的成绩(循环录入)。
for( var i=1;i<=3;i++ ){// i=>1 j=>1// i=>1 j=>2// i=>2 j=>1for( var j=1;j<=4;j++ ){console.log( '第'+i+'个班级第'+j+'名学生的成绩' );}}
//写法2for( var i=1;i<=4;i++ ){console.log( '第1个班级第'+i+'名学生的成绩' );}for( var i=1;i<=4;i++ ){console.log( '第2个班级第'+i+'名学生的成绩' );}for( var i=1;i<=4;i++ ){console.log( '第3个班级第'+i+'名学生的成绩' );}
上面的代码就是一个典型的嵌套循环的操作,这种嵌套循环的语法对于新手极其容易让人混淆,所以我们一开始需要牢牢抓住嵌套循环的语句的特点:
外层循环执行一次,内层循环执行一轮
上面的代码仅仅只是让我们循环录入每一个同学的成绩,并没有做其他事情,我们将需求改一下。
要求1:计算出三个班级的总分。
var sum = 0;for( var i=1;i<=3;i++ ){// 外层循环控制班级for( var j=1;j<=4;j++ ){// 内层循环控制人数var score = +prompt('请输入第'+i+'个班级第'+j+'个学生的成绩');sum += score;}}console.log( sum );
要求2:计算出每一个班级自己的平均分。
for( var i=1;i<=3;i++ ){// 外层循环控制班级var sum = 0;for( var j=1;j<=4;j++ ){// 内层循环控制人数var score = +prompt('请输入第'+i+'个班级第'+j+'个学生的成绩');sum += score;}console.log( '第'+i+'个班级的平均分为:'+sum/4 );}
while和for循环体的区别
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while
while和do...while的区别
当条件为false时,while一次都不会执行,先判断再执行
当条件为false时,do...while至少会执行一次,先执行再判断
break和continue区别
break语句
之前我们在switch语句中使用了break语句,用以跳出switch语句。
break语句也可以用在循环语句中,也可以跳出循环语句。
需求:计算1-10整数之和,当和大于20时结束计算:
var sum = 0;for( var i=1;i<100;i++ ){sum += i;if( sum>20 ){break;// 跳出循环}}sum;// 21
continue语句
continue和break语句类似,也是跳转的作用,可以让代码不按照既有的顺序执行。
continue是跳出本次循环,直接进入下一次循环操作。
求1-100之间所有偶数之和:
var sum = 0;
?for( var i=1;i<=100;i++ ){
?// 当continue语句执行,循环体中continue语句后面的所有的代码都不会执行
?// 直接进入下一次循环
?if( i %2 == 0 ) continue;
?sum += i;
?}
练习
// 需求1:求出1-100之间所有整数之和
// 需求2:求出1-100之间所有偶数之和
// 需求3:求出1-100之间所有奇数的和
// 需求4:输出1-100之间所有7的倍数
//需求5:在页面中输出1-1000之间所有5的倍数,每8个数字换一行
// 6.让用户输入十个数字,比较出其中最大值
// 7.求1-10之间的整数和,和大于20时候停止相加,并输出和,以及以前的数字
// 8.输出加法公式
// 9需求:录入学生的成绩。共有三个班级,记录每个班级四名学生的成绩(循环录入)
// 要求1:计算出三个班级的总分
// 要求2:计算出每一个班级自己的平均分
/*10***************
/*11**************************/
?
/*12****************/
/*13
?****************
*********
?*/
/*14****************/
/*15***************
?*/
?
// 16两种乘法口诀表
复习
完整的循环
1,定义循环变量
2,循环条件
3,循环体
4,更新循环变量
JS五大基本数据类型
1,number
2,string
3,boolean
4,undefined
5,null
String() 和 toString() 区别?
1,调用方式不同
String( 变量 )
变量.toString()
2,String()可以转换任意数据,toString()无法转换undefined和null
答案
?
// 需求1:求出1-100之间所有整数之和
// 先定义sum
// var sum = 0;
// // 用for
// for(var i = 1;i <=100;i++){
// sum+=i;
// }
// console.log(sum);
?
?
// 需求2:求出1-100之间所有偶数之和
// 先定义和
// var sum = 0;
// for
// for(var i = 1; i<=100;i++){
// // if判断偶数
// if(i%2 === 0){
// sum += i;
// }
// }
// console.log(sum);
// var sum = 0;
// for(var i = 1; i<=100;i++){// if(i%2 === 0) continue;
// sum+=i;
// }
// console.log(sum);
?
//
// 需求4:输出1-100之间所有7的倍数
// for(var i = 1; i <=100; i++){
// if(i%7 !==0) continue;
// console.log(i);
?
// }
?
//需求5:在页面中输出1-1000之间所有5的倍数,每8个数字换一行
// var count = 0 ;
// for(var i = 1; i<=1000; i++){
// if(i %5 ===0) {
// count++;
// document.write(i + " ");
?
// if(count %8 === 0){
// document.write("<br>");
// }
// }// }
// 6.让用户输入十个数字,比较出其中最大值
// var max = 0;
// for(var i = 0;i<10;i++){
// var num = + prompt("请输入第"+i+"个数字");
// if(max<num){
// max = num;
// }
// }
// console.log(max);
?
?
?
// 7.求1-10之间的整数和,和大于20时候停止相加,并输出和,以及以前的数字
?
// var sum = 0;
// for(var i = 1; i<=10;i++){
// sum+=i;
// if(sum>20) break;
?
// }
// console.log(sum,i);
?
// 8.输出加法公式// 0+5=5// 1+4=5// 2+3=5// 3+2=5// 4+1=5// 5+0=5
// for(var i = 0 ,j=5;i <=5,j>=0;i++,j--){
?
// console.log(i+ "+"+j + "="+(i+j));//嵌套会出现问题
// }
?
?
// 9需求:录入学生的成绩。共有三个班级,记录每个班级四名学生的成绩(循环录入)
// for(var i = 1;i<=3;i++){
// for(var j = 1;j<=4;j++){
// var score = +prompt("第"+i+"班级第"+j+"名学生成绩");
// console.log(score);
// }
// }
// 要求1:计算出三个班级的总分
// 要求2:计算出每一个班级自己的平均分
// for(var i = 1;i<=3;i++){
// var sum = 0;
// for(var j = 1;j<=4;j++){
// var score = +prompt("第"+i+"班级第"+j+"名学生成绩");// sum+=score;
// }
// console.log("第"+i+"班级平均分"+sum,sum/4);
// }
/*10***************
?
?1**2***3****4*****5******1*** 32****43*****4******5*******
?
*/
// for(var i = 1; i <=5;i++){
// for(var j = 1; j <= i;j++){
// document.write("*");
// }
// document.write("<br>")
// }
?
/*11*************************
?
?*/
// for(var i = 1;i <= 5;i++){
// for(var j = 1; j<=2*i-1;j++){
// document.write("*");
// }
// document.write("<br>")
// }
/*12****************/// for(var i = 1;i<=5;i++){// for(var j = 5;j>=i;j--){// document.write("*");// }// document.write("<br>")// }
/*13
?****************
*********
?*/
// for(var i = 1; i<=5;i++){
// for(var j = 4;j>=i;j--){
// document.write(" ");
// }
// for(var k = 1; k<=2*i-1;k++){
// document.write("*");
// }
// document.write("<br>")
// }
?
/*15*************************
?*/
// for(var i = 1;i<=5;i++){
// for(var j = 1; j<=5;j++){
// document.write("*"+" ");
// }
// document.write("<br>");
// }
// var str = "";
// for(var i = 1;i<=5;i++){
// for(var j = 1; j<=5;j++){
// str +="*"+" ";// }
// str+="\n";
// }
// console.log(str);
// 16两种乘法口诀表
// var str = "";
// for(var i = 1;i<=9;i++){
// for(var j = i;j<=9;j++){
// str+=i+ "*"+j+"="+(i*j)+"\t";// }
// str+="\n";
?
// }
// console.log(str);