04.JS逻辑结构
前言:
学习一门编程语言的基本步骤
(01)了解背景知识
(02)搭建开发环境
(03)语法规范
(04)常量和变量
(05)数据类型
(06)数据类型转换
(07)运算符
(08)逻辑结构
8.逻辑结构——logic
程序=数据+算法
程序分为顺序执行,选择执行,循环执行
(1)流程控制—选择执行
1)if语句 结果为真的时候
if(条件表达式){
语句1;
}
语句2;
注意:if后的大括号中如果只有一行语句,则可以省略大括号.
//if语句 //如果满30就减15 var total=32; if(total>=30){//如果total金额大于等于30 total-=15;//在原来基础上减15 } console.log(total);//17 //练习:声明一个变量保存年龄,如果满18,打印成年人 var age=19; if (age>=18) {console.log('成年人'); console.log('可以去网吧'); } var age=19; if (age>=18) console.log('成年人');//只有一行语句,的时候可以省略{},也可以写一行 //练习:如果签名内容为空,设置默认签名 //声明变量保存签名内容,如果签名为空,设置默认签名‘这家伙很懒什么也没留下’,打印签名内容 var page='好热啊'; //if (page==='')//判断是否为空。 if (!page) // !''->!false -> true {page='这家伙很懒,什么也没留下'; } console.log(page);//好热啊
在条件表达式中,有一些值默认代表false
数值型的false的情况:0,NaN,
字符串型的false的情况:'',空字符
未定义的false的情况:undefined
空的false的情况:null
if (0) { console.log('hello'); }//不打印 if (1) { console.log('hello'); }//打印hello
2)if-else语句 如果前面是假就执行后面的条件表达式
if(条件表达式){
语句1;
}else{
语句2;
}
//if-else语句 //声明变量保存性别,0/1,如果是0打印女,否则打印男 var sex=0; if (sex===0){ console.log('女'); }else{ console.log('男'); } //练习:声明变量分别保存用户名和密码,如果用户名是root,并且密码是123456,打印登录成功,否则打印登录失败 var uname='rojot'; var upwd='123456'; if (uname==='root' && upwd==='123456'){ console.log('登录成功'); }else{ console.log('登录失败'); }
3)if-else 嵌套,解决多项分支选择
if (条件表达式1){
语句1;
}else ...if(条件表达式n){
语句n;
} else{
语句n+1;//以上的条件表达式都是false,就执行该语句
}
//if-else 嵌套 //声明变量保存一个人的成绩,根据成绩打印对应的汉字 var score=56; if (score>=90){ console.log('优秀'); }else if(score>=80 && score<90 ){ console.log('良好'); }else if(score>=70 && score<80 ){ console.log('中等 '); }else if(score>=60 && score<70 ){ console.log('及格'); }else{ console.log('不及格'); }
4)switch-case 是一种特殊的多项分支语句,只有一种比较方式,就是全等于===
switch-case ——转换器-情况
break ——结束打破
switch(表达式){//通常是一个变量
case 值1 ://如果表达式的值是 值1,
语句1;
break;//结束后面的语句
...
default:
语句n+1;//如果表达式的值和case中的值比较都是false,才会执行n+1
}
注意:表达式在和case后的值比较的时候,使用的是全等于,要求值和类型都相同。
//switch-case语句 //根据星期的状态码,来打印对应的汉字0-6 var date=0; switch (date) { case 0: console.log('星期日'); break; 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; default: console.log('错误的星期代码'); }
总结1:对比 if-else嵌套和switch-case的区别
相同点:两者都可以用于多项分支语句
不同点:if-else可以判断相等或是不等的情况。使用 范围更广泛;
switch-case只能用于全等于的比较,结构上给为清晰合理,可读性高,执行效率更高
(2)流程控制——循环执行
循环:一遍又一遍执行相同或是相似的代码。
循环的两个要素:
循环条件:控制执行循环的次数,
循环体:重复执行的相同或是相似的代码
1)while循环
while(循环条件){
循环体
}//当循环条件为true的时候,循环体运行中,循环条件是false的时候,循环结束
//while循环 //循环产生10-20之间所有的数字,并打印出来 var num=10; while (num<=20){//循环条件 console.log(num); num++;//循环体 } //练习:计算1-100之间所有偶数和 var i=1;//声明变量i var sum=0;//声明变量sum while (i<=100){//循环条件,如果I小于等于100 if(i%2===0){//计算为偶数的条件, sum+=i; //sum等于sum加i } i++;//自增 } console.log(sum);//2550
2)break打破循环
在循环中,可以提前结束任何形式的循环
isNaN()判断一个值是否为NaN 是—>TRUE 不是—>false
//break打破循环 //打印数字1-10 var i=1; while (true){//不停+1,没有结束 console.log(i);//每循环+1一次就打印一次数字 if (i===10){//当i为10的时候 break;//结束循环 } i++;//循环+1 }//输出结果为1-10每个数字都打印一遍 // 在这里需要注意console.log(i)和 i++;的位置,位置不一样,输出的效果不一样,我们这里的需求是打印数字1-10 /*————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/ //下面需要用到浏览器端函数,简单解释一下 //alert() 弹出警示(消息)框 //prompt() 弹出提示(输入)框,需要使用变量来保存输入的值,默认类型是字符串类型,如果输入框中内容为空,返回空字符(''),如果点击取消返回null、 //练习:声明一个变量保存一个数字。无限循环弹出提示框,并输入数字,如果输入的数字大于保存的数字,弹出警示框提示 ‘big’, //如果输入的数字小于保存的数字,弹出警示框提示‘small’,否则弹出警示框提示‘right’,结束循环。 var num=102; while(true){ //弹出提示框 var str=prompt('input a number'); //如果输入大于之前的值 if (num<str){ alert("big"); //如果输入的值小于之前的数字 }else if (num>str){ alert("small"); }else{ //判断是否为数字,如果不是,提示 var str2=Number(str); //isNaN,是否是NaN ——>true if (isNaN(str2)){ alert('input a number'); }else{ //猜对 alert("right"); break; }//注意这里空字符转数值为0 } }
3)do-while循环 先执行一遍循环体,在判断循环条件,即使循环条件为false,也会在执行一遍循环体。
do{
循环体
}while(循环条件);
//do—while循环 //循环产生1-10之间所有的整数 var i=1; do{ console.log(i); i++; } while (i<=10); /*———————————————————————————————————————————————————————————————— */ //练习:声明变量保存123456,循环弹出提示框输入密码,如果输入正确结束循环。 var upwd="123456"; do{ //保存输入的密码 var str=prompt('input password'); //判断输入的密码是否正确 if (str===upwd){//如果正确 break;//结束循环 } } while (true);//循环条件。 //其他写法 var upwd="123456"; do{ //保存输入的密码 var str=prompt('input password'); } while (str!==upwd);//如果输入的str保存的upwd不同,继续弹出窗口
4)for循环 表达式1:初始值,表达式2:循环条件,表达式3:增量,可以分解多种可能 多个循环条件中只有最后的一个起作用。
for(表达式1;表达式2;表达式3){
循环体 ;
}
//for循环 //计算1-20之间所有能被3整除的数字的乘积 var sum=1;//声明变量sum for (var i=1;i<=20 ;i++ )//i初始值为1,循环条件为小于等于20,i执行自增 { if (i%3===0){//如果i取余3等于0 sum*=i//sum等于sum乘以i } } console.log(sum);//打印sum //练习:计算1-100的和 for (var i=1,sum=0;i<=100;i++ ){ sum+=i } console.log(sum); //其他写法 var i=1,sum=0; for ( ;i<=100;i++ ){//第一个表达式可以不用,但是要保留位置上的;分号,代表第一个表达式为空 sum+=i } console.log(sum); //练习:打印2000-2100年之间所有的闰年 //闰年:4年一闰,并且不能被100整除,或者能被400整除 for (var year=2000;year<=2100;year++){ if (year%4===0 && year%100!==0 || year%400===0){ console.log(year); } }
5) continue跳过特定条件继续执行循环
跳过后边的循环体,继续执行增量。
//continue跳过 //练习:打印1-100之间所有的整数,排除能被3整除和能被4整除的数字 for (var i=1;i<=100 ;i++ ){//i初始值为1,循环条件为小于等于100,i执行自增 if (i%3===0 || i%4===0){//如果i取余3等于0并且i取余4等于0 continue;//跳过此条件继续执行循环 } console.log(i);//打印i }
总结2:break和continue的区别
break :结束循环,后续不会再执行后续的循环
continue:跳过后边的循环体,继续执行增量,也就是下一次循环。
(3)循环嵌套——nest
任何的循环之间可以相互嵌套
//循环嵌套 //循环打印五次五颗* for (var i=1,str='';i<=5 ;i++ ){ //每次循环拼接* str+='*'; } console.log(str);//打印结果 //以上代码要执行五次,把以上代码再次放到另一个循环中 //外层循环代表一共有多少行 for (var j=1; j<=5 ;j++ ){ //内层循环,控制每行有多少星星 for (var i=1,str='';i<=5 ;i++ ){ //每次循环拼接* str+='*'; }; console.log(str); }