JavaScript——流程控制

JavaScript/前端
418
0
0
2022-12-02

流程控制

在一个程序执行的过程中,各条代码的执行顺序对程序的结构是有直接影响的,很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能。

流程控制就是来控制我们的代码按照什么结构顺序来执行。

流程控制主要有三种结构:顺序结构、分支结构和循环结构,这三种结构代表三种代码执行的顺序。

顺序结构

顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序回按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

img

分支结构

由上到下执行代码的过程中,根据不同的条件,执行不同的路径代码(执行代码多选一的过程),从而得到不同的结果。

img

if语句结构

语句可以理解为一个行为,循环语句和分支语句就是典型的语句。

一个程序由很多个语句组成,一般情况下,会分割成一个一个的语句。

if(条件表达式){
    //执行语句
}
  • 如果 if里面的条件表达式为真则执行大括号里面的执行语句
  • 如果 if条件表达式结果为假则不执行大括号里面的语句直接执行if语句后面的代码
if (3 > 5) {
    alert('岳泽以')
}
alert('个人博客')//最后结果弹出个人博客

案例:判断可否上网

var age = prompt('请输入年龄')
if (age >= 18) {
    alert('允许上网')
}

if...else双分支语句

img

如果表达式为真执行语句1否则执行语句2

if (条件表达式) {
    //执行语句1
} else {
    //执行语句2
}

案例:判断年份是否为闰年

var year = prompt('请输入年份')
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
    alert('你输入的年份是闰年')

} else {
    alert('你输入的年份是平年')
}

if语句里面的语句1和else里面的语句2最终只能有一个语句执行。

if..else..if多分支语句

就是利用多个条件来选择不同的语句执行,得到不同的结果,多选1的过程。

if (条件表达式1) {
    //语句1;
} else if (条件表达式2) {
    //语句2;
} else if (条件表达式3) {
    //语句3;
} else {
    //最后语句;
}

案例:判断成绩级别

var score = prompt('请输入分数:');
if (score >= 90) {
    alert('A');
} else if (score >= 80) {
    alert('B');
} else if (score >= 70) {
    alert('c');
} else if (score >= 60) {
    alert('D');
} else {
    alert('你挂科了');
}

三元表达式

由三元运算符组成的式子叫做三元表达式。

语法结构:

    条件表达式 ? 表达式1 : 表达式2

如果条件表达式结果为真,则返回表达式1的值,如果表达式结果为假,则返回表达式2的值。

var num = 10;
var result = num > 5 ? '是的' : '不是的';
alert(result);

案例:数字补0

var time = prompt('请输入一个0~59的数字');
var result = time < 10 ? '0' + time : time;
alert(result);

switchi语句

switch语句也是多分支语句,也可以实现多选1。

switch (表达式) {
    case value1:
        执行语句1;
        break;
    case value2:
        执行语句2;
        break;
        ...
        default:
            执行最后的语句;
}

执行思路:利用我们的表达式的值和case里面的选项值相匹配,如果匹配上,就执行该case里面的语句,如果都没有匹配上,那么执行default里面的语句。

switch (2) {
    case 1:
        alert('这是1');
        break;
    case 2:
        alert('这是2');
        break;
    case 3:
        alert('这是3');
        break;
    default:
        alert('没有匹配结果');
}

switch语句注意事项:

  • 在我们开发中,表达式经常写成变量。
  • 表达式的值和case里面的值相匹配的时候是全等,必须是值和数据类型一致才可以。
  • 如果当前的case里面没有break,则不会推出switch而继续执行下一个case

案例:查询水果

var name = prompt('请输入要查询的水果');
switch (name) {
    case '苹果':
        alert('3元/斤');
        break;
    case '香蕉':
        alert('5元/斤');
        break;
    case '橘子':
        alert('2元/斤');
        break;
    default:
        alert('没有匹配结果');
}

switch和if...else if的区别

  • 一般情况下,他们俩个语句可以相互替换
  • switch..case语句通常处理case为比较确定值的情况,而if...else..语句更加灵活,常用于范围判断(大于、等于某个范围)。
  • switch语句进行条件判断后直接执行到程序的条件语句,效率更高,而if...else语句有几种条件,就得判断多少次。
  • 当分支比较少时,if..else语句的执行效率比switch语句高。
  • 当分支比较多时,switch语句的执行效率比较高,而且结果更清晰。

循环结构

循环的目的:在实际问题中,有许多具有规律性的重复操作,因此在程序中要完成这类操作就需要重复执行某些语句

在Js中,主要有三种类型的循环语句

  • for循环
  • while循环
  • do while循环

在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件

由循环体以及循环的终止条件组成的语句,被称之为循环语句

for循环

for循环重复执行某些代码,通常根计数有关。

语法结构

for (初始化变量; 条件表达式; 操作表达式) {
    //循环体
}
  • 初始化变量就是用var声明的一个普通变量,通常用于作为计数器使用。
  • 条件表达式就是用来决定每一次循环是否执行,就是终止的条件。
  • 操作表达式是每次循环最后执行的代码,经常用于我们计数器变量进行更新(递增或递减)。
for (var i = 1; i <= 100; i++) {
    alert('你好!');
}
//1.首先执行里面的计数器变量 var i = 1,但是这句话在for里面只执行一次
//2.去i<=100来判断是否满足条件,如果满足条件就执行循环体,不满足条件退出循环
//3.最后去执行i++,i++是单独写的代码,递增,第一轮结束
//4.接着去执行i<=100,如果满足条件就执行循环体,不满足条件退出循环
//结果:弹出100次你好!后退出循环

执行过程:初始化变量--条件表达式--循环体--操作表达式

断点调试

断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。

断点调试可以帮助我们观察程序的运行过程。

  • F12-->sources(源代码)-->找到需要调试的文件-->在程序的某一行设置断点
  • Watch:监视,通过watch可以监视变量的值的变化,非常的常用。
  • F11:程序单步执行,让程序一行一行的执行,这个时候观察watch中变量值的变化。

for循环重复执行相同代码

可以让用户控制输出的次数

var num = prompt('请输入要输出的次数');
for (var i = 1; i <= num; i++) {
    alert('你好!')
}

for循环重复执行不相同的代码

for循环可以重复执行不同的代码,因为我们有计数器变量i的存在,i每次循环值都会变化。

案例:输入1一个人1~100岁

for (var i = 1; i <= 100; i++) {
    alert('这个人今年' + i + '岁了');
}
//判断输出岁数
for (var i = 1; i <= 100; i++) {
    if (i == 1) {
        alert('这个人刚出生');

    } else if (i == 100) {
        alert('这个人已经去世了');
    } else {
        alert('这个人今年' + i + '岁了');
    }
}

for循环重复某些相同操作

for循环因为有了计数器的存在,我们还可以重复的执行某些操作,比如做一些算术运算。

案例:计算1~100的和

var sum = 0;
for (var i = 1; i <= 100; i++) {
    //sum = sum + i;
    sum += i;
}
alert(sum);

追加字符串实现一行打印

var str = '';
for (var i = 1; i <= 5; i++) {
    str = str + '※';
}
console.log(str);

双重for循环执行

很多情况下,单层for循环并不能满足我们的需求,比如我们要打印一个5行5列的图形、打印一个倒直角三角形等,此时就可以通过循环嵌套来实现。

循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,例如在for循环语句中,可以再嵌套一个for循环,这样的for循环语句被称之为双重for循环

for (外层的初始化变量; 外层的条件表达式; 外层的操作表达式) {
    for (里层的初始化变量; 里层的条件表达式; 里层的操作表达式) {
        //执行语句;
    }
}

我们可以把里面的循环看做是外层循环的语句,外层循环循环一次,里面的循环执行全部。

for (var i = 1; i <= 3; i++) {
    console.log('这是外层循环的第' + i + '次');
    for (var j = i; j <= 3; j++) {
        console.log('这是里层循环的第' + i + '次');
    }
}

img

for循环总结

  • for循环可以重复执行某些相同的代码
  • for循环可以重复执行些许不同的代码,因为我们有计数器
  • for循环可以重复执行某些操作,比如算术运算符加法操作
  • 随着需求增加,双重for循环可以做更多、更好的效果
  • 双重for循环,外层循环一次,内存for循环全部执行
  • for循环是循环条件和数字直接相关的循环

while循环

while语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环。

语法结构

while (条件表达式) {
    //循环体代码
}

执行思路

  1. 先执行条件表达式,如果结果为true,则执行循环体代码;如果为false,则退出循环,执行后面代码。
  2. 执行循环体代码
  3. 循环体代码执行完毕后,程序会继续判断执行条件表达式,如条件仍为true,则会继续执行循环体,直到循环条件为false时,整个循环过程才会结束。
while (num <= 100) {
    console.log('岳泽以');
    num++;
}
  • while循环里面也有计数器,初始化变量。
  • while循环里面也有操作表达式,完成计数器的更新,防止死循环。

案例:计算1-100的和

var sum = 0;
var j = 1;
while (j <= 100) {
    sum += j;
    j++;
}
console.log(sum);

do while循环

do...while循环语句其实是while语句的一个变体,该循环会先执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环。

do {
    //循环体
} while (条件表达式)

跟while不同的地方

  • do...while先执行一次循环体再判断条件。
  • do...while循环体至少执行一次

案例:不爱我就一直弹

do {
    var message = prompt('你爱我吗?');
} while (message !== '我爱你')
alert('我也爱你!');

循环总结

  • JS中循环有for、while、do while
  • 三个循环很多情况下都可以相互替代使用
  • 如果是用来计数,跟数字相关的,三者使用基本相同,但是我们更喜欢用for
  • while和do..while可以做更复杂的判断条件,比for循环灵活一些
  • while和do...while执行顺序不一样,while先判断后执行,do...while先执行一次,再判断执行
  • while和do...while执行次数不一样,do...while至少会执行一次循环体,而while可能一次也不执行
  • 实际工作中,我们更常用for循环语句,写法简介直观

continue关键字

continue关键字用于立即跳出本次循环,继续下一次循环(本次循环中continue之后的代码就会少执行一次)。

例如:吃5个包子,第3个有虫子,就扔掉第3个,继续吃掉第4个和第5个包子。

for (var i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;
    }
    console.log('我正在吃第' + i + '个包子');
}

break关键字

break关键字用于立即跳出整个循环(循环结束)。

例如:吃5个包子,吃到第3个发现里面有半个虫子,其余的(3、4、5)不吃了。

for (var i = 1; i <= 5; i++) {
    if (i == 3) {
        break;
    }
    console.log('我正在吃第' + i + '个包子');
}

命名规范及语法格式

  • 变量、函数的命名必须要有意义
  • 变量的名称一般用名词
  • 函数的名词一般用动词
  • 操作符的左右俩侧给保留一个空格
  • 单行注释前面注意有个空格