module1-04-流程控制语句

流程控制语句

一、表达式和语句讲解

1.1 表达式

  • 一个表达式可以产生一个值

  • 表达式会执行出一个结果,然后再参与其它程序

1.2 语句

  • 语句可以理解为一个行为,如循环语句判断语句

  • 一般用;来分割语句,特殊结构(循环语句除外)

1.3 流程控制语句

  • 通过一些特殊结构可以让js代码加载时,要么可以跳过一部不加载,或者可以循环加载一段代码

  • 如:条件废止语句、循环语句

二、条件分支语句

2.1 if语句

  • 最常用得条件分支语句

  • 结构

    • condetion expression:条件表达式,可以是任意的代码或者表达式,会转换为布尔类型

    • statement: 结构体,用{}包括一行到多行语句,要执行就都执行,要不执行就都不执行

    • if:如果

    • else:否则

  • 如果条件表达式为真true,执行结构体1,否则执行结构体2

注意事项

  • 不写else,条件不成立,则直接跳过

  • 结构体如果是单行的话,可以省略{}不写

    • 建议在只有一个if没有else的时候使用

  • 执行完if,无论走哪个分直,结束后都要继续执行if语句后面的其它语句

2.2 多分支if语句

  • 语法:if······else if······else if······else

  • 结构

注意事项

  • ① 多分枝if语句中可以有多个else if语句,但是只能由一个else语句

  • ② 在任意一个分支满足条件,直接执行该分支下的结构体然后跳出if语句

  • ③ 因为后面的else if语句是在上一个if语句没有满足的情况下才进行判断的,所以可以化简后面else if表达式

2.3 if语句嵌套

  • 在if语句的结构体里面,可以写另一组if语句

  • 满足外部if条件的时候才能执行内部嵌套的if语句

  • 优点:可以简化多分支if语句,比如一些else if中共同拥有的部分

2.4 三元表达式

  • 又叫三元运算符必须由三个操作数参与的运算

  • 表达式1(boolean_expression) ? 表达式2(true_value) : 表达式3(false_value)

    • true_value是表达式为真的时候会触发的

    • false_value是表达式为假的时候会触发的

优点

  • ① 二选一的情况下,三元表达式结构更加简单

  • ② 因为其式表达式参程序时必须运算出结果才能参与的,可以将二选一的结果赋值给一个变量

2.5 switch语句

  • 又叫开关语句,允许一个程序求一个表达式的值,并且尝试去匹配表达式的值到一个case标签。如果匹配成功,就会执行相关的语句

  • 结构

    • switch:表示进入一个开关语句

    • 表达式:会将表达式的值去跟case后面的值进行全等匹配(===),值和数据类型也要相等

    • case:后面需要跟空格空开,匹配成功后会去执行后面所有语句(包括其它case的结构)

      • 格式为:case 值:()注意要加冒号

    • break:表示打断结构体,跳出程序,一般用于值匹配一个的话避免执行其它case的结构体的时候用break进行打断操作

    • default:没有case匹配的情况下,会执行default后面的语句,注意加冒号

注意事项

  • default可以不写,相当于if语句没有else

  • break根据需求在case后面写,避免跳楼现象,可以利用不写break进行一些特殊的案例

    • 最好给case后面添加的式固定值

    • 不要 1 || 3 || 5 || 7 || 8 || 10 || 12

      • 这样最后的结果只会取到1

2.6 总结

  • if语句:最常用的语句,所有的判断情况都可以用这个进行书写

  • 三元表达式:多用于给变量赋值根据二选一的情况

  • switch:多用于给一个表达式去匹配多种固定值可能性的情况

三、循环语句

3.1 for循环

  • for循环是一种前测试循环语句,在反复执行一段代码之前,都要先测试入口条件,如果条件为,可以继续循环,如果条件为,必须跳出循环不再执行

  • for循环是一种反复执行一段代码知道测试条件为假时停止

  • 语法

    • 这种解释只能涵盖for循环一部分特殊结构,不能表示所有for循环实现的情况

  • 执行过程

    • ① -> (②->③->④) * 循环次数 -> ⑤

(1)注意事项1

  • 一定要有两个分号,即使那一部分为空,不然会导致语法错误

  • for循环后面的 {} 后面不用加分号

  • 避免出现死循环

    • for循环第二部分不写或为true或设置不合理的话会出现死循环

  • ③执行完之后才会执行④,③里面的代码可以任意编写

  • for嵌套for循环,必须先执行内层for循环之后才会继续外层for循环

  • 循环内变量是全局变量,必须避免起相同变量名,常用 i,j,k

3.2 do while循环

  • 是一种后测试循环语句,即执行完再去判断入口条件

  • 结构

    • do {
         结构体;
      } while(条件表达式)
    • 先执行一次循环体,然后当条件表达式为真时可以继续循环

注意事项

  • 如果循环需要变量参与,则必须在外面定义变量,否则会被重置

  • 循环变量自加写在{}内部

  • 避免出现死循环

  • 至少会执行一次循环体,即使条件第一次为假

3.3 while循环

  • 前测试循环语句,执行前会执行入口条件(这点跟for类似)

  • 语法

    • while (条件表达式) {
         循环体;
      }
    • 条件为真,执行;条件为假,跳出循环

注意事项

  • 跟do while类似,建议把循环内参与的变量在外部定义

  • 循环变量自加内部实现不建议写在条件表达式

  •  

3.4 for while do while循环总结

  • 遇到必须执行一次先得使用do while

  • 先测试入口条件得可以选择for或while

3.5 break语句

  • 已经达到目的,不需要更多循环

  • 可以用在for、do while、while

  • 可以根据一些条件设置break位置,执行到的话立刻停止执行,跳出循环

    • 可以节省代码的执行,优化代码

案例

  • 判断1 - 50之间有没有能够被5整除的数字

for (var i = 0; i < 50; i++) {
   if (i % 5 == 0) {
       console.log(i)
       break
  }
}

注意事项

  • break只能打断自己的循环,不会对外层循环进行打断

  • 终止外层循环

    • 外层循环添加上一个标签名,在内层循环的break关键字后面空格加上该标签即可

    • waiceng: for(var i = 0; i < 10; i++) {
         for (var j = 0; j < 3; i++) {
             if (j % 2 == 0) {
                 break waiceng // 打断2外层循环
            }
        }
      }
    •  

3.6 continue

  • 跳过本次循环,进行下一次循环

  • 不同于break的是不是直接打断该循环

案例

  • 找到 1- 30 之间,输出不是5的倍数的数字

for (var i = 0; i < 30; i++) {
   if (i % 5 == 0) {
       continue
  }
   console.log(i)
}

注意事项

  • 跟break相似,也只能停止本次循环,使用标签名可以对外层循环进行操作

  • 标签名只有在循环之内有效,循环之外访问不到,具有块级作用域的特性

3.7 穷举思想

  • 因为计算机没法智能的筛选所需要的数据

  • 穷举思想:一种解决问题的方法,将所有的需要数据所在范围内所有的数据都一一列举出来,再根据规律的条件对所有数据星星筛选

制作方法

  • for循环遍历所有数据,再用if进行判断

  • 案例

    • 输出这个数的所有约束

    • var num = parseInt(prompt('请输入一个数字'))
      for (var i = 1; i <= num; i++) {
         if (num % i == 0) {
             console.log(i)
        }
      }
    •  

3.8 累加器、累乘器

  • 使用变量应用在循环器里面

(1)案例1 - 累加器

  • 求1 - 10之间所有数字的和

var num = 0
for (var i = 0; i <=10; i++) {
   num += i
}
console.log(num) // 1 + 2 + ... + 10

(2)案例2 - 求一个数的阶乘

var num = 1
for (var i = 0; i < 10; i++) { // 求10的阶乘
num *= 10 - i
}
console.log(num)
  • 累乘的初始值不能为0

3.9 综合案例 --- 水仙花

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

var num1 = parseInt(prompt('请输入第一个数'))
var num2 = parseInt(prompt('请输入第二个数'))
for (var i = num1; i <= num2; i++) {
  const gewei = Math.pow(Math.floor(i % 10), 3)
  const shiwei = Math.pow(Math.floor(i / 10 % 10), 3)
  const baiwei = Math.pow(Math.floor(i / 100), 3)
  if (gewei + shiwei + baiwei == i) {
    console.log(i)
  }
}

 

posted @ 2020-12-05 00:49  叻仔猪  阅读(73)  评论(0编辑  收藏  举报