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=>1
for( var j=1;j<=4;j++ ){
console.log( '第'+i+'个班级第'+j+'名学生的成绩' );
}
}
//写法2
for( 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*** 3
2****4
3*****
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);