流程控制语句

表达式

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

语句

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

流程控制语句

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

条件分支语句

if语句

  • if语句是最常用的条件分支语句,作用就是通过某个特定的判断条件,决定走哪条分支的代码
    -结构:
if (condition expression) {
    statement1;
} else {
    statement2;
}
  • condition expression:条件表达式,任意的代码或者表达式,参与程序过程都会强制得到一个布尔值执行结果。表达式,js中遇到的任何表达式都会计算出一个结果然后才能继续执行程序

  • statement:结构体,js中可以使用{}包含一行到多行的语句,这些语句构成了一个结构体,结构体的语句要执行就都会执行,取决于condition expression的结果

  • if:如果

  • else:否则

  • 上述代码总结:如果条件表达式是true,执行1,否则执行2

注意事项

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

多分支if语句

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

注意事项

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

if语句嵌套

  • if语句内部嵌套了if语句
  • 如果想执行内部 if 语句的某个分支,必须满足外部 if 语句的条件,同时还要满足内部 if 语句的某个条件。
  • 优点:可以简化多分支 if 语句。
    案例:男女退休判断
 // 外层的 if 语句只判断性别
    // 内层的 if 语句只判断年龄
    if (sex === "男") {
      // 男性,年龄需要大于60岁
      if (age >= 60) {
        alert("恭喜你,可以享受人生了");
      } else {
        alert("忍忍吧,还要坚持坚持");
      }
    } else {
      // 女性,年龄需要大于55岁
      if (age >= 55) {
        alert("恭喜你,幸福人生开始了");
      } else {
        alert("太难了,还得继续坚持");
      }
    }

三元表达式

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

语法:

  • boolean_expression ? true_value : false_value;
  • boolean_expression:布尔表达式,表达式在参与三元运算中必须求得一个布尔类型的值,要么是 true,要么是 false,结果作为判断依据,判断到底去:前面的值还是后面的值。
  • true_value:布尔表达式的值为真时,三元表达式的结果。
  • false_value:布尔表达式的值为假时,三元表达式的结果。
  • 作用:根据布尔表达式的结果,如果为真,三元表达式结果就是真值,如果为假,三元表达式结果就是假值
    var a = 4;
    var b = a >= 5 ? 1 : 0;
    console.log(b);

运行结果:0

优点

  • 虽然if语句可以模拟三元表达式,但是三元表达式有自己的优点:
    ①二选一的情况下,三元表达式结构更加简单。
    ②三元表达式作为一个表达式参与程序时必须运算出结果才能参与,可以利用这个特点,将二选一结果赋值给一个变量。
  • 遇到给一个变量根据条件二选一赋值的情况,可以使用三元表达式。

switch语句

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

  • switch:关键字表示开始进入一个开关语句
  • 表达式:会求出一个具体的值,用于去匹配case后面的值,匹配相等的条件不只是值相等,数据类型也要相等
  • case:示例,关键字后面要有空格,书写匹配的值
  • case后面的结构体,每个case匹配成功之后要有执行的语句
  • break:打断结构体,直接跳出,模拟跳楼现象
  • default:相等于if的else,否则的情况,case都不匹配的话,就执行default后面的语句

switch语句运行机制

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

注意事项

  • default可以不写,等于if里没有else,同理
  • break关键字,每个case后面都要写,不写的话就不会跳出结构体,会一直运行到直至遇到下一个break
  • 可以用break不写的情况制作一些特殊的案例

条件分支语句的总结

  • 三种语句的情景
  • if:所有的判断条件都能书写
  • 三元表达式:多用于给变量赋值的二选一情况
  • switch:多用于给一个表达式去匹配多种固定值可能性的情况

循环语句

for循环

  • for 循环是一种前测试循环语句,在反复执行一段代码之前,都要先测试入口条件,如果条件为真,可以继续循环,如果条件为假,必须跳出循环不再执行。
  • or 循环是一种反复执行一段代码直到测试条件为假时停止。
 for(定义循环变量;变量的最大值或最小值;步长){
         循环体;
    }

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


for循环注意事项

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

do while循环

do while 循环是一种后测试循环语句,会先执行一次结构体,执行完后才会去判断入口条件,如果条件为
真能够继续下一次循环,如果条件为假跳出循环。

  • 语法:
 do{
            结构体;
        }while(条件表达式);

  • do:做什么。后面是每次循环的循环体。
  • while:当……时候。
  • 先执行一次循环体,然后当条件表达式为真时可以继续循环。

注意事项

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

while循环

  • while 循环是一种前测试循环语句,在执行循环体之前都要测试入口条件,条件为真继续执行,条件为假直接跳出循环。

语法

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

当条件表达式为真时,执行循环体,如果为假,跳出循环。

注意事项

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

总结

  • 遇到必须要执行一次循环体的循环,使用do while
  • 先测试入口条件的循环,选择for或者while

break语句

  • break语句可以立即停止当前的for、do while、while循环
  • 根据一些条件设置break位置,直到循环能够执行到break语句立即停止执行,跳出循环

注意事项

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


continue语句

  • 遇到continue表示当前的一次循环数据不是想得到的,立即停止当前循环进行下一次循环

注意事项

  • 要根据特殊条件设置 continue 的位置。
  • continue 如果没有特殊指示只能进入自己的下一次循环,不能立即停止外层循环的这一次进入下一次。
  • 控制外层循环的方式与 break 一样,都是添加外层的标签名。


总结

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

穷举思想

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

制作方法:

  • for循环:外层使用for循环进行一一列举
  • if语句:内层用if判断,筛选数据,有满足的就操作数据,不满足的跳过看下一次循环数据
    案例:
// 让用户随意输入一个正数,给用户输出这个数字所有的约数
    var n = parseInt(prompt("请输入一个正整数"));
    // 穷举思想,外层一一列举可能性,内层判断
    for (var i = 1 ; i <= n ; i++) {
      // 内层判断 i 是否是 n 的约数
      if (n % i == 0) {
        console.log(i + "是" + n + "的一个约数");
      }
    }

累加器

  • 有时候需要的不是每个数据是什么,需要得到所有数据的加和,必须想办法将所有的数据的和存起来,就用到了累加器。
  • 累加器本质就是变量。
  • 实现累加的效果,就是利用循环,每次循环就将新的数据加到原始的变量中去,赋值过程是一个加等于赋值。
    案例:
//定义累加器
var sum = 0;
for(var i = 1 ; i <= 10 ; i ++){
    sum+=i;
}
console.log(sum);

注意事项

  • 累加器要定义在循环的外面,定义在内部的话会被重置,不能实现累加功能
  • 初值必须设置,而且应该设置为0,不影响累加的效果
  • 用最终的累加效果的时候,必须在for循环结束的外面,写在内部,循环还没有结束

累乘器

  • 与累加器几乎一致
//定义累乘器
var mul= 0;
for(var i = 1 ; i <= 10 ; i ++){
    mul*=i;
}
console.log(mul);

注意事项

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

实际案例:水仙花数

  • 水仙花数:个十百位的三次方相加等于本身的数
    思想:使用循环进行穷举法列举出所有的三位数,分别计算出个十百位的数字,然后定义一个变量把相加得到的值赋值给它,再进行判断
// 穷举思想,列举所有的三位数
    for (var i = 100 ; i <= 999 ; i++) {
      // i 的三个数位的三次方的和,等于 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 ;
      // 判断 sum 是否等于 i 自己,如果是,就是水仙花数,需要输出
      if (sum == i) {
        console.log(i);
      }
    }
答案
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容