笔记来源 尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)_哔哩哔哩_bilibili

流程控制

1、流程控制语句

JS中的程序是从上到下一行一行执行的

通过流程控制语句可以控制程序执行流程,使程序可以根据一定的条件来选择执行

语句的分类:

  • 条件判断语句
  • 条件分支语句
  • 循环语句

2、条件判断语句

使用条件判断语句,可以在执行某个语句之前进行判断

如果条件成立才会执行语句,条件不成立则语句不执行。

if 语句

语法一

  1. if(条件表达式) {
  2. 语句
  3. }

if语句在执行时,会先对条件表达式进行求值判断

  • 如果条件表达式的值为true,则执行if后的语句
  • 如果条件表达式的值为false,则不执行if后的语句

if语句只能控制紧随其后的那个语句,如果希望if语句可以控制多条语句,可以将这些语句统一放到代码块中

if语句后的代码块不是必须的,但是在开发中尽量写上代码块,即使if后只有一条语句

语法二

  1. if(条件表达式) {
  2. 语句1...
  3. } else {
  4. 语句2...
  5. }

if...else...语句执行时,会先对if后的条件表达式进行求值判断

  • 如果该值为true,则执行if后的语句
  • 如果该值为false,则执行else后的语句

语法三

  1. if(条件表达式) {
  2. 语句1...
  3. } else if(条件表达式) {
  4. 语句2...
  5. } else if(条件表达式) {
  6. 语句3...
  7. } else{
  8. 语句4...
  9. }

if...else if...else语句执行时,会从上到下依次对条件表达式进行求值判断

  • 如果值为true,则执行当前语句
  • 如果值为false,则继续向下判断
  • 如果所有的条件都不满足,则执行最后一个else后的语句
  • 该语句中,只会有一个代码块被执行,一旦代码块执行了,则直接结束语句

练习

prompt()可以弹出一个提示框,该提示框中会带有一个文本框,用户可以在文本框中输入一段内容

该函数需要一个字符串作为参数,该字符串将会作为提示框的提示文字

用户输入的内容将会作为函数的返回值返回,可以定义一个变量来接收该内容

  1. // 练习1
  2. // 从键盘输入小明的期末成绩:
  3. // 当成绩为100时,’奖励一辆BMW’
  4. // 当成绩为[80-99]时,’奖励一台iphone15s'
  5. // 当成绩为[60-80]时,’奖励一本参考书’
  6. // 其他时,什么奖励也没有
  7. var score = prompt("请输入小明的期末成绩:");
  8. if(score == 100){
  9. alert("奖励一辆BMW");
  10. } else if(score >80 && score <= 99){
  11. alert("奖励一台iphone15s");
  12. } else if(score >60 && score <= 80){
  13. alert("奖励一本参考书");
  14. } else{
  15. alert("什么奖励也没有");
  16. }
  17. // 练习2
  18. // 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
  19. // 高:180cm以上;富:1000万以上;帅:500以上;如果这三个条件同时满足,则:’我一定要嫁给他’
  20. // 如果三个条件有为真的情况,则:’嫁吧,比上不足,比下有余。’
  21. // 如果三个条件都不满足,则:’不嫁!’
  22. // 练习3
  23. // 编写程序,由键盘输入三个整数分别存入变量num1、num2、num3,对他们进行排序,并且从小到大输出。

其他练习,大家可以自己尝试做下。练习2还是很简单的,跟练习1差不多,无非就是多了几次输入。练习3的话,如果你是初学编程的话,可以尝试做一做,不过个人感觉可以在学完for循环之后再做,而且这个应该当做简单的算法题。

switch 语句

  1. switch(条件表达式) {
  2. case 表达式1:
  3. 语句1...;
  4. break;
  5. case 表达式2:
  6. 语句2...;
  7. break;
  8. default:
  9. 语句...;
  10. break;
  11. }

switch...case..语句

在执行时会依次将case后的表达式的值和switch后的条件表达式的值进行全等比较

  • 如果比较结果为true,则从当前case处开始执行代码。当前case后的所有的代码都会执行,我们可以在case的后边跟着一个break关键字,这样可以确保只会执行当前case后的语句,而不会执行其他的case
  • 如果比较结果为false,则继续向下比较
  • 如果所有的比较结果都为false,则只执行default后的语句

switch语句和if语句的功能实际上有重复的,使用switch可以实现if的功能,同样使用if也可以实现switch的功能,所以我们使用时,可以根据自己的习惯选择

  1. // 对于成绩大于60分的,输出’合格’。低于60分的,输出’不合格’
  2. var score = prompt("请输入成绩:");
  3. var tmp = parseInt(score/10);
  4. switch (tmp){
  5. case 10:
  6. case 9:
  7. case 8:
  8. case 7:
  9. case 6:
  10. alert("合格");
  11. break;
  12. default:
  13. alert("不合格");
  14. break;
  15. }

while 语句

循环语句:通过循环语句可以反复的执行一段代码多次

while循环语法:

  1. while(条件表达式) {
  2. 语句...
  3. }

while语句在执行时,先对条件表达式进行求值判断

  • 如果值为true,则执行循环体,循环体执行完毕以后,继续对表达式进行判断
  • 如果为true,则继续执行循环体,以此类推
  • 如果值为false,则终止循环
  1. var a = 0;
  2. while(true) {
  3. alert(a++);
  4. }

像这种将条件表达式为true的循环,叫做死循环

该循环不会停止,除非浏览器关闭,死循环在开发中慎用。可以使用break,来终止循环

  1. var i = 0;
  2. while(true){
  3. document.write(i++ + "<br/>");
  4. if(i > 10){
  5. break;
  6. }
  7. }

创建一个循环,往往需要三个步骤:

  1. 创初始化一个变量
  2. 在循环中设置一个条件表达式
  3. 定义一个更新表达式,每次更新初始化变量
  1. // 1.创初始化一个变量
  2. var i = 0;
  3. // 2.在循环中设置一个条件表达式
  4. while(i < 10){
  5. // 3.定义一个更新表达式,每次更新初始化变量
  6. document.write(i++ + "<br/>");
  7. }

练习

  1. // 假如投资的年利率为5%,试求从1000块增长到5000块,需要花费多少年
  2. var money = 1000;
  3. var year = 0;
  4. while(money < 5000){
  5. money *= 1 + 0.05;
  6. year++;
  7. }
  8. alert("需要花费" + year + "年");

do-while 语句

do...while循环语法:

  1. do{
  2. 语句...
  3. }while(条件表达式)

do...while语句在执行时,会先执行循环体,循环体执行完毕以后,在对while后的条件表达式进行判断

  • 如果结果为true,则继续执行循环体,执行完毕继续判断,以此类推
  • 如果结果为false,则终止循环

实际上这两个语句功能类似,不同的是

  • while是先判断后执行,而do...while会先执行后判断
  • do...while可以保证循环体至少执行一次,而while不能

for 语句

for语句,也是一个循环语句,也称为for循环

for循环中,为我们提供了专门的位置用来放三个表达式:

  • 初始化表达式
  • 条件表达式
  • 更新表达式

for循环的语法:

  1. for(①初始化表达式;②条件表达式;③更新表达式) {
  2. ④语句...
  3. }

for循环的执行流程:

  • ①执行初始化表达式,初始化变量(初始化表达式只会执行一次)
  • ②执行条件表达式,判断是否执行循环。
    • 如果为true,则执行④语句
    • 如果为false,则终止循环
  • ③执行更新表达式,更新表达式执行完毕,继续重复②

for循环中的三个部分都可以省略,也可以写在外部

如果在for循环中不写任何的表达式,只写两个;,此时循环是一个死循环会一直执行下去,慎用

  1. for(;;){
  2. alert("hello");
  3. }

练习

  1. // 练习1、打印1-100之间所有奇数之和
  2. for(i=1,result=0;i<=100;i++){
  3. if(i%2 == 1){
  4. result += i;
  5. }
  6. }
  7. console.log('result='+result);
  8. // 练习2、打印1-100之间所有7的倍数的个数及总和
  9. for(i=1,result=0,count=0;i<=100;i++){
  10. if(i%7 == 0){
  11. result += i;
  12. count++;
  13. }
  14. }
  15. console.log('个数='+count+',总和='+result);
  16. // 练习3、水仙花数
  17. // 水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。
  18. // (例如:1^3+5^3+3^3=153),请打印所有的水仙花数。
  19. var hundreds_place;
  20. var tens_place;
  21. var ones_place;
  22. for(i=100;i<1000;i++){
  23. hundreds_place = parseInt(i/100);
  24. tens_place = parseInt(i/10) - parseInt(hundreds_place*10);
  25. ones_place = i % 10;
  26. if(i == (hundreds_place*hundreds_place*hundreds_place
  27. + tens_place*tens_place*tens_place
  28. + ones_place*ones_place*ones_place)){
  29. console.log(i);
  30. }
  31. }
  32. // 练习4、在页面中接收一个用户输入的数字,并判断该数是否是质数。
  33. // 质数:只能被1和它自身整除的数,1不是质数也不是合数,质数必须是大于1的自然数。
  34. var num = prompt("请输入一个数字:");
  35. while(isNaN(num)){
  36. num = prompt("请输入一个数字:");
  37. }
  38. flag = true;
  39. for(j=2;j<num;j++){
  40. if(num%j==0){
  41. flag = false;
  42. break;
  43. }
  44. }
  45. if(flag){
  46. alert(num + "是质数");
  47. } else{
  48. alert(num + "不是质数");
  49. }
  50. // 练习5、通过程序,在页面中输出如下的图形:
  51. //*
  52. //**
  53. //***
  54. //****
  55. //*****
  56. // 通过一个for循环来输出图形
  57. // 这个for循环执行几次,图形的高度就是多少
  58. // 它可以用来控制图形的高度
  59. for(i=0;i<5;i++){
  60. // 在循环的内部再创建一个循环,用来控制图形的宽度
  61. // 目前我们的外部的for循环执行1次,内部的就会执行5次
  62. // 内层循环可以来决定图形的宽度,执行几次图形的宽度就是多少
  63. for(j=0;j<=i;j++){
  64. document.write("*");
  65. }
  66. document.write("<br/>");
  67. }
  68. // *****
  69. // ****
  70. // ***
  71. // **
  72. // *
  73. for(i=0;i<5;i++){
  74. for(j=0;j<5-i;j++){
  75. document.write("*");
  76. }
  77. document.write("<br/>");
  78. }
  79. // 练习6、九九乘法表
  80. for(i=1;i<10;i++){
  81. for(j=1;j<=i;j++){
  82. document.write(j + "×" + i + "=" + i*j + "\t");
  83. }
  84. document.write("<br/>");
  85. document.write("<br/>");
  86. }
  87. // 练习7、打印出1~100之间的所有质数
  88. var flag = true;
  89. for(i=2;i<=100;i++){
  90. flag = true;
  91. for(j=2;j<i;j++){
  92. if(i%j==0){
  93. flag = false;
  94. break;
  95. }
  96. }
  97. if(flag){
  98. console.log(i);
  99. }
  100. }
  101. // 质数性能优化
  102. console.time("test");
  103. var flag;
  104. for(i=2;i<=100000;i++){
  105. flag = true;
  106. for(j=2;j<=i/Math.sqrt(i);j++){
  107. if(i%j==0){
  108. flag = false;
  109. break;
  110. }
  111. }
  112. if(flag){
  113. // console.log(i);
  114. }
  115. }
  116. console.timeEnd("test");

break和continue

不能在if语句中使用breakcontinue

break

  • break关键字可以用来退出switch或循环语句
  • break关键字,会立即终止离他最近的那个循环语句

可以为循环语句创建一个label,来标识当前的循环label

循环语句使用break语句时,可以在break后跟着一个label,这样break将会结束指定的循环,而不是最近的

continue

  • continue关键字可以用来跳过当次循环
  • continue也是默认只会对离他最近的循环循环起作用