流程控制
流程控制就是来控制我们的代码按照什么结构顺序执行
流程控制主要有三种结构:顺序结构 分支结构和循环结构
顺序流程控制
顺序结构程序中最简单最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的.
流程控制-分支
分支结构: 由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果
js语言提供了两种分支结构语言:if语句和switch语句
if语句
语法结构
if(条件表达式){条件成立执行的代码语句}
执行思路:
如果if里面的条件表达式结构为真true则执行大括号里面的执行语句,如果if条件表达式结果为假,则不执行大括号里面的语句,则执行if语句后面的代码
案例1进入网吧
var age=prompt('请输入您的年龄')
if(age>=18){alert('可以进出网吧')}
if else语句
语法结构:
if(条件表达式){ 执行语句1 } else{ 执行语句2 }
执行思路:如果满足条件表达式1结果为真,如果不满足条件表达式1那么执行语句3
案例进入网吧
var age=prompt('请输入您的年龄')
if(age>=18){alert('可以进出网吧')}
else if(age>=90>){alert('不建议您进入网吧')}
else{alert('18以下不能进网吧')}
案例算闰年
var date=prompt('查询闰年')
if(date/4===0&&date/100!==0||date/400===0){console.log(date+'是闰年')}
else{console.log(date+'不是闰年')}
if else if多分支语句
多分支语句就是利用多个条件来选择不同的语句执行,得到不同的结果,多选1的过程
语法规范:
if(条件表达式1){语句1} else if(条件表达式2){语句2} else if(条件表达式3){语句3} else{ 最后的语句}
执行思路: 如果满足条件表达式1,满足就执行语句1,退出整个if分支语句
如果满足条件表达式1不满足,则判断条件表达式2,满足的话,执行语句2,退出整个if分支语句
如果满足条件表达式2不满足,则判断条件表达式3,满足的话,执行语句3,退出整个if分支语句
如果上面所有条件都不满足,则执行else里面的语句
注意点:
1.多分支语句还是多选1,最后只能有一个语句执行
2.else if里面的条件理论上是可以任意多个的
3.else if中间有个空格
<!--案例判断成绩级别 -->
<!-- 90分以上(含90)A 80~90(不含90)分B, 70~80(不含80)分C,60~70(不含70)分D,60分以下(不含60)E -->
var g=prompt('请输入你的成绩')
if(g>=90){alert('A')}
else if(g>=80){alert('B')}
else if(g>=70){alert('C')}
else if(g>=60){alert('D')}
else{alert('E')}
三元表达式
定义:由三元运算符组成的式子我们称为三元表达式
语法结构: 条件表达式?表达式1:表达式2
执行思路:
如果条件表达式结果为真则返回表达式1的值,如果条件表达式结果为假,则返回表达式2的值
/* 数字补0案例 */
/* 用户输入数字,如果数字小于10,则在前面补0,比如01,09,如果数字大于10,则不需要补,比如20 */
var num=prompt('请输入数字')
num<10 ? alert(0+num) : alert(num)
switch语句(也是分支语句)
它用于基于不同的条件来执行不同的代码,当要针对变量设置一系列的特定值的选项时,就可以使用switch
语法结构: switch(转换开关的意思)case(例子选项意思)
switch(表达式){
case value1:
执行语句1;
break;
case value2:
执行语句2;
break;
default:
执行最后的语句
}
!!!!!注意表达式的值与value的值要数据类型和数值要完全一样
执行思路:利用我们表达式的值和case后面的选项值匹配,如果匹配上,就执行该case里面的语句,如果没有匹配上,那么执行default里面的语句
注意事项:
1.我们在开发里面表达式经常写成表量
2.表达式的值与value的值要全等,必须是数据类型和数值要完全一样
3.break如果当前的case里面没有break,则不会突出switch是继续执行下一个case
switch (2) {
case 1:console.log('这是1');
break ;
case 2:console.1og('这是2' );
break;
case 3:console.1og('这是3' );
break;
default:console. log( '没有匹配结果' );
}
/* 查询水果案例 */
/* 用户在弹出框里面输入一个水果,如果有就弹出该水果的价格,如果没有该水果就弹出没有该水果 */
var na=prompt('查询水果的价格')
switch(na){
case '西瓜':alert('西瓜2.98元/斤')
break;
case '桃子':alert('桃子4.98元/斤')
break;
case '香蕉':alert('香蕉6.98元/斤')
break;
default:alert('没有此水果')
}
/* 根据月份输出对应的天数 */
/* var day = prompt('**月有多少天')
switch (day) {
case '1':
console.log('有31天')
break;
case '2':
console.log('有28天')
break;
case '3':
console.log('有31天')
break;
case '5':
console.log('有31天')
break;
case '7':
console.log('有31天')
break;
case '8':
console.log('有31天')
break;
case '10':
console.log('有31天')
break;
case '12':
console.log('有31天')
break;
default:
console.log('有30天')
}
var date = prompt('**月有多少天')
switch (date) {
case '1':
case '3':
case '5':
case '7':
case '8':
case '10':
case '12':
console.log('有31天')
break;
case '2':
console.log('有28天')
break;
case '4':
case '6':
case '9':
case '11':
console.log('有30天')
break
} */
if else if语句与switch语句的区别
1.一般情况下,它们两个语句可以互相替换
2.switch..case语句通常处理case为比较确定的值的情况,而if..else语句更加灵活,常用于范围判断(大于等于某个范围)
3.switch语句进行条件判断后直接执行到程序的条件语句,效率更高,而if..else语句有几种条件,就得判断多少次
4.当分支比较少的时候if..else语句的执行效率比switch语句高
5.当分支比较多时,switch语句的执行效率更高,而且结构更清晰
流程控制-循环
循环的目的:可以重复执行某些代码
JS中主要有for循环/while循环/do..while循环
循环体和循环语句
在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件,由循环体及循环的终止条件组成的语句,被称为循环语句
for循环
1.for重复执行某学代码,通常跟计数有关
2.语法结构:
for(初始化变量;条件表达式;操作表达式){ 循环体 }
3.初始化变量就是用var声明的一个普通变量,通常用于作为计数器使用的
4.条件表达式就是用来决定每一次循环是否继续执行,就是终止的条件
5.操作表达式时每次循环最后执行的代码,经常用于我们计数器变量进行更新(递增或者递减)
6.执行过程
for(var i=1;i<=100;i++){console.log('你好吗')}
a.首先执行里面的计数器变量 var i=1,但是这句话在for里面只执行一次,index
b.去i<=100来判断是否满足条件,如果满足条件,就去执行循环体,不满足条件就退出循环
3.最后去执行i++ i++时单独写的代码递增,第一轮结束
4.接着去执行i<=100如果满足条件,就去执行循环体,不满足退出循环
for(var i=1;i<=100;i++){
if(i==1)
{console.1og('这个人今年1岁了,他出生了');}
elseif(i==100)
{console.log('这个人今年100岁了,他死了');}
else
{console.log('这个人今年’+ i + '岁了');}
}
/* 案例求1-100之间整数之和 */
var sum=0
for(var a=1;a<=100;a++)
{sum=sum+i}
console.log(sum)
/* 案例求1-100之间所有数平均值 */
var sum=0
var average=0
for(var a=1;a<=100;a++){sum+=i}
average=sum/100
console.log(average)
/* 案例求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)
/* 案例求1-100之间所有能被3整除的数字的和 */
var sum=0
for(var i=1;i<=100;i++){
if(i%3===0){sum=sum+i}
}
console.log('1-100之间能被3整除的数字之和为'+sum)
// 水仙花数是指三位数各个位置数字3次方的和等于本身,那么这个数就是水仙花数
// 案例求100-1000之间的水仙花数
for (i = 100; i < 1000; i++) {
var gw = i % 10
var sw = parseInt(i / 10 % 10)
var bw = parseInt(i / 100)
var sum = gw ** 3 + sw ** 3 + bw ** 3
if (sum === i) {
console.log(i + '是水仙花数');
}
}
双重for循环
1.语法结构:
for(外层的初始化变量;外层的条件表达式;外层的操作表达式){
for(里层的初始化变量;里层的条件表达式;里层的操作表达式){
执行语句;
}
}
2.我们可以把里面的循环看做是外层的执行语句
3.外层循环循环一次里面的循环执行全部
4.案例打印五行五列星星
var str='';
for(var i=1;i<=5;i++){
for(var j=1 j<=5;j++){
str=str+'⭐'
}
str=str+'\n';
}
console.log(str)
/* 倒三角案例 */
var str = ''
for (i = 1; i <10; i++) {
for (a = i; <= 10; a++) { str = st+ '⭐';}
str += '\n';
}
console.log(str);
/* 正三角案例 */
var str = ''
for (i = 1; i <10; i++) {
for (a = 1; <= i; a++) {
str = st+ '⭐';}
str += '\n';
}
console.log(str);
while循环
1.语法结构
while(条件表达式){ 循环体 }
2.执行思路:
当条件表达式结果为true则执行循环体,否则退出循环体
3.里面应该也有计数器初始化变量
4.里面应该也有操作表达式完成计数器的更新,防止死循环
1.初始化
2.条件判断
3.要执行的代码
4.改变自身(改变初始化的内容)
一.while循环
语法:while(条件){满足条件时执行的代码,} */
// 举例1
var num = 0 /* 初始化 */
while (num < 1000) {/* 2小括号内的是条件判断 */
console.log(1)/* 3.要执行的代码 */
num++;/* 4.改变自身 */
}
/* 计算1-100之间的数字求和 */
var shu = 1
var sum = 0
while (shu <= 100) {
sum = sum + shu/* sum+=shu */
shu++
}
console.log(sum);
/* 解析
第一次执行的时候 shu=1 sum=0
判断shu是否小于等于100,是的话往下执行
sum重新赋值为0+1=1
shu++ 自增shu变为1
第二次执行的时候 shu=2 sum=1
判断shu小于等于100,是,往下执行
sum=2+1 结果为3
shu++ shu=2
第三次执行的时候 shu=2 sum=3
判断shu是否小于等于100,是,往下进行
sum=2+3 结果为5
shu++ shu=3
*/
do while循环
1.语法结构:
do{ 循环体 }while(条件表达式)
2.执行思路:
跟while不同的地方在于do while先执行一次循环体,再判断条件,如果条件为真,则继续执行循环体,否则退出循环体
3.dowhile至少执行一次循环体
/* do while循环
是一个类似while循环语句
while循环在开始的时候先判断条件是否成立,然定是否执行代码
do ..while循环在开始次的时候,不会判断条件,是说,不管条件成不成立,次都会执行 */
// while循环
var day = 10
while (day < 10) {
console.log(day)
day--
}
// do..while循环
var date = 10
do {
console.log(date)
date--
} while (date < 5)
/* do...while循环的时第一次的时候不会管这个是否成立,一定会执行一次
第一次执行(忽略条件, 执行代码)
date === 10
因为第一次执行不需要判件, 所以直接执行代码
consoLe.Log(date)---10
date-- 后续使用date候,date的值就已经变化了,自减1
判晰条件:date<5才能进一轮循环
此时date的值是10,不满件,所以循环到此结束*/
循环小结
1.如果是用来计次数,跟数字相关的,三者使用基本相同,但是我们更喜欢用for
- while. do while可以做更复杂的判断条件比for循环更灵活些
3.while和do while执行顺序不一样,while先判断后执行,do while先执行一次,再判断执行
4.while和do while执行次数不一样,while至少执行一次循环体,而while可能一次不执行
continue和break
continue关键字用于立即跳出本次循环,继续下一次循环(本次循环中continue之后的代码就会少执行一次) break关键字用于立即跳出整个循环(循环结束)
// 1.break(结束掉整个循环,不管循环后边还有多少轮)
// 2continue(跳出当前这一轮循环,直接开始下一轮循环)
// 1break
/* 有五个包子,吃完三个之后吃饱了,不再继续吃第4 个包子 */
for (i = 1; i <= 5; i++) {
console.log('我吃了一个包子');
if (i === 3) { break }
}
// 2.continue
// 有五个包子,当我吃到第三个包子的时候第三个包子上了,我要继续吃第四第五个包子
for (a = 1; a <= 5; a++) {
if (a === 3) {
console.log('第三个包子不吃因为掉地上了');
continue
}
console.log('我吃了一个包子');
}
// continue案例求1~100之间,除了能够被7整除之外的整数和
var sum=0
for(var a=1;a<=100;a++>){
if(a%7===0){continue;}
sum+=a
}
console.log(sum)