JS流程控制语句中不可不知的小点

表达式、语句

表达式

  • 一个表达式可以产生一个值,有可能是运算、函数调用、有可能是字面量。表达式可以放在任何需要值得地方
  • 特点:表达式会先执行出一个结果,然后再参与其他程序

语句

  • 语句可以理解为一个行为,循环语句和判断语句就是典型的语句。一个程序有很多个语句组成,一般情况下分号;分隔一个一个的语句。
  • 语句可以认为是给计算机的一个指令,执行这段代码
  • 一般语句以分号结束,特殊的结构除外

流程控制语句

  • 通过一些特殊结构可以让js代码加载时,要么可以跳过一部分不加载,或者可以循环加载一段代码
  • 包括:条件分支语句、循环语句

if语句的语法

  • if语句是最常用的条件分支语句,作用就是通过某个指定的判断条件,决定走哪个分支的代码
if (condition expression) {
    
    
    statement1;
} else {
    
    
    statement2;
}
  • condition expression:条件表达式,可以是任意的代码或者表达式,参与程序过后才能都会强制得到一个布尔值执行结果。表达式,JS中遇到任何表达式都会先计算出一个结果然后才能继续参与程序
  • statement:结构体,JS中可以用{}包括一行到多行语句,这些语句整体组成了一个结构体,结构体中的语句要执行就都执行,要不执行就都不执行
  • if:如果
  • else:否则
  • 总结:如果条件表达式为true,执行结构体1,否则执行结构体2

if语句注意事项

  • if语句可以实现选择的功能,两个分支可以选择一个执行,不会都执行
  • if语句可以不写else分支,表示条件成立就执行后面的结构体,如果条件不成立,直接跳出if语句不执行。
  • if语句后面的结构体如果是单行语句组成,可以省略{}不写。不建议省略大括号,容易出现程序错误。
  • if语句能够控制自己内部的流程,但是不论走哪个分支,结束后都要继续执行if语句后面的其他语句,叫做殊途同归现象

多分支if语句

  • 包含多个判断条件,对应多个分支
  • 语法:if...else if...else if...else...
  • 如果。。。否则如果。。。否则如果。。。否则
if (条件1) {
    
    
    满足条件1,执行的结构体
} else if (条件2) {
    
    
    满足条件2,执行的结构体
} else if (条件3) {
    
    
    满足条件3,执行的结构体
} else {
    
    
    不满足前面所有条件,执行的结构体
}

注意事项

  1. 多分支if语句中可以有多个else if的分支,但是else分支只能有一个,必须在最后,作为备用的选项,而且else也可以省略不谢,表示前面条件如果都不满足,直接跳出不走任何分支
  2. 多分支if语句有跳楼现象:条件从上往下依次验证,如果满足了某个条件,会立即执行后面的结构体,执行完之后,不会再往后验证其他的条件了,而是从这一层直接跳楼跳出if语句,这就是跳楼现象

if语句嵌套

  • if语句的结构体部分,代码可以是任意的代码,甚至是另外一组if语句。
  • 也就是if语句内部嵌套了if语句
  • 如果想执行内部if语句的某个分支,必须满足外部if语句的条件,同时还要满足内部if语句的某个条件
  • 优化:可以简化多分支if语句

三元表达式

  • 又叫三元运算符,必须有三个操作数参与的运算
  • 操作符号:?:
  • 表达式:在参与js程序是,都必须先计算出表达式结果,才能参与后续程序
  • 由于三元表达式具备了一些选择的效果,所以也是一种条件分支语句

三元表达式语法

  • boolean_expression?true_value:false_value;
  • boolean_expression:布尔表达式,表达式在参与三元运算符中必须求得一个布尔类型的值,要么是true要么是false,结果作为判断依据
  • 作用:根据布尔表达式的结果,如果为真,三元表达式结果就是真值,如果为假,三元表达式结果就是假值

三元表达式优点

  • 二选一的情况下,三元表达式结构更加简单
  • 三元表达式作为一个表达式参与程序时,必须先运算出结果才能参与,可以利用这个特点,将二选一结果赋值给一个变量
  • 遇到一个变量根据条件二选一赋值的情况,可以使用三元表达式

switch语句

  • 开关语句允许一个程序求一个表达式的值,并且尝试去匹配表达式的值到一个case标签。如果匹配成功,这个程序执行相关的语句。
switch (表达式) {
    
    
    case1:
        结构体1;
        break;
    case2:
        结构体2;
        break;
    ...
    default:
        结构体n;
        break;
}

语句结构解析

  • switch
    • 关键字表示开始进入一个开关语句
  • 表达式
    • 回球出一个具体的值,将这个值去与{}内部的case后面的值进行对比、匹配,如果值相等表示匹配成功。匹配相等时,方式是进行全等于匹配,不治之要相等,数据类型也要相等
  • case
    • 示例的意思,作为关键字后面必须跟一个空格,书写匹配的值
  • case后面的结构体
    • 每个case匹配成功之后要执行的语句
  • break
    • 用于打断结构体,直接跳出程序,模拟跳楼现象
  • default
    • 相当于if语句中的else,否则的情况,如果前面的case都不匹配,执行default后面的语句

语句运行机制

  • switch语句首先会将小括号内的表达式计算出一个结果,用结果去匹配结构体内部的case;
  • 从上往下进行匹配,如果匹配成功,会立即执行这个case后面的语句,直到遇到一个break跳出整个switch语句;
  • 如果前面的case没有匹配成功,会跳过case之间的语句,去匹配下一个case,直到匹配成功,如果都不成功就执行default后面的语句

switch语句的注意事项

  • default可以不写,相当于if语句没有else
  • break关键字:根据结构需要有时必须在每个case后面都要写,为了模拟跳楼现象,如果不写break,对应的case后面的语句执行之后,不会跳出结构体,会继续向下执行其他case的后面的语句,直到遇到一个break

可以利用break不写的情况制作一些特殊的案例

for循环的语法

  • for循环是一种前测试循环语句,在反复执行一段代码之前,都要先测试入口条件,如果条件为真,可以继续循环,如果条件为假,必须跳出循环不再执行
  • for循环是一种反复执行一段代码直到测试条件为假时停止
for (;;) {
    
    

}
// 呆板的语法:
for (定义循环变量;变量的最大值或最小值;步长) {
    
    
  循环体;
}
// 这种解释只能涵盖for循环的一部分特殊结构,不能表示所有的for循环实现的情况

for循环的注意事项1

  • 小括号内部必须有两个分号
  • for循环{}后面不需要加分号
  • 如果没有设置入口条件,或者条件永远为真,没法限制什么时候停止循环的话会出现死循环
  • 循环的结构体,是可以人为自定义的,甚至可以书写if语句
  • for循环嵌套if语句:表示既要能够执行循环,还要满足if语句的条件
  • for循环嵌套for循环:外层循环执行一次,内层循环作为外层循环的结构体,必须执行完所有的内层循环,才能进入外层循环下一次
  • 循环内的变量是全局变量,必须避免循环嵌套起相同的变量名,内层和外层变量必须不同,常用的变量名i、j、k

do while循环

  • do while循环是一种后测试循环语句,回西安只行一次结构体,执行完后才会去判断入口条件,如果条件为真能够继续下一次循环,如果条件为假跳出循环
do {
    
    
  结构体;
} while(条件表达式)
  • do:做什么。后面是每次循环的循环体
  • while:当。。。时候
  • 先执行一次循环体,然后当条件表达式为真时可以继续循环

注意事项

  • 如果循环中需要循环变量参与,循环变量必须定义在循环外面,否则会被重置
  • 循环变量自加的过程需要写在{}循环体内部
  • 如果将循环变量写在结构体内,i的初始值每次都会被重置,容易出现死循环
  • 变量自加过程写在输出语句前面和后面,结果是不同的
  • do while 循环即便条件第一次测试就为假,也会执行一次结构体
  • 至少会执行一次循环体

while循环

  • while循环是一种前测试循环语句,在执行循环体之前都要测试入口条件,条件为真继续执行,条件为假直接跳出循环
whiel (条件表达式) {
    
    
  循环体;
}

注意事项

  • 如果需要循环变量参与,必须定义在循环外部,避免被重置
  • 循环变量自加的过程写在循环体内部

总结

  • 遇到必须先执行一次结构体的循环,使用do while循环
  • 先测试入口条件的循环,可以选在for循环或while循环

break语句

  • 我已经找到我的答案了,不需要进行更多的循环了
  • break语句的作用可以理解停止当前的for、do while、while循环
  • 根据一些条件设置break位置,知道循环能够执行到break语句立即停止执行,跳出循环

注意事项

  • break如果没有特殊知识,只能停止自己所在的那一层循环,并不能终止外部循环
  • 如果想停止外层循环,可以给外层循环添加一个标签名label,在内层循环的break关键字后面空格加一个label名

continue语句

  • 这个答案不是我想要的,赶紧试试下一个吧
  • 遇到continue表示当前的一次循环数据不是我们想要的,会立即停止当前次的循环,立即进入下一次循环
  • 控制外层循环的方式与break一样,都是添加外层的标签名

总结

break和continue这两个语句的出现可以帮助我们大量的优化代码,减少了计算机的计算次数

穷举思想

  • 实际案例中,可能需要找到一些有规律的数据,但是计算机没办法自动智能筛选所要的数据,智能程序员自己书写一段代码,让计算机根据代码去进行筛选
  • 穷举思想:是一种解决问题的方法,将所有的需要数据所在范围内所有的数据都一一列举出来,再根据规律的条件对所有这些数据进行筛选,这种方法就是穷举法

制作方法

  • for循环:外层使用for循环进行一一列举
  • if语句:内层用if语句进行判断,筛选需要的数据,如果满足条件就操作数据,如果不满足条件跳过看下一次循环的数据

累加器和累乘器

累加器

  • 有时候需要的不是每个数据是什么,需要得到所有数据的加和,必须想办法将所有的数据的和存起来,就用到了累加器
  • 累加器本质就是变量
  • 实现累加的效果,就是利用循环,每次循环就将新的数据加到原始的变量中去,赋值过程是一个加等于赋值

注意事项

  • 累加器必须定义在循环外面的前面,如果定义在循环内部,每次循环都会将累加器重置,不能实现累加功能
  • 累加器的初始值必须设置,而且必须设置为0,不会影响累加结果
  • 使用最终累加结果时,必须在for循环结束后的外面,如果写在循环内部,循环没结束,并不是最终需要的值

累乘器

  • 累积一些数据的乘积。与累加器非常类似

注意事项

  • 累乘器必须定义在循环外部前面
  • 累乘器的初始值必须是1,,乘以任何数都等于本身
  • 累乘器最终结果必须在for循环结束后使用

水仙花数案例

水仙花数是一种特殊的三位数,它的特点就是每个数位的三次方和,等于它本身

for (var i = 100; i <= 999; i++) {
    
    
  var ge = i % 10,
      shi = parseInt(i / 10) % 10,
      bai = parseInt(i / 100);
  
  var sum = ge * ge * ge + shi * shi * shi + bai * bai * bai;

  if (sum == i) {
    
    
    console.log(i)
  }
}

猜你喜欢

转载自blog.csdn.net/CS_DGD/article/details/109584114