目录
一、流程控制
二、分支结构
1. if语句
2. if…else语句
3. if…else if语句
4. switch语句
5. 条件表达式构成的选择结构
三、循环结构
1.while循环
2. do-while循环
3. for循环
3.1 for循环转换为while循环
3.2 断点调试
4. 循环嵌套
流程控制是指通过控制代码的执行顺序来完成要实现的功能,流程控制的3种结构如下:
if语句也称为条件语句、单分支语句,当满足某种条件时,就进行某种处理。
if ( 条件表达式 ) {
// 代码段
}
当条件表达式为真时,执行下面的代码。

var t = true;var a=10,b=20;console.log("交换前:a="+a+",b="+b);if(t){var t = a;a=b;b=t;}console.log("交换后:a="+a+",b="+b);
在没有'{}'的时,if控制范围是到其后的第一条语句
// 在没有'{}'的时,if控制范围是到其后的第一条语句var t = false;var a=10,b=20;console.log("交换前:a="+a+",b="+b);if(t)var t = a; // 因为t为false,所以if语句不成立,这句话没有执行a=b; // 输出:20,因为没有{},不再if循环中,所以执行了b=t; // 输出:false,因为没有{},不再if循环中,所以执行了console.log("交换后:a="+a+",b="+b);
if…else语句也称为双分支语句,当满足某种条件时,就进行某种处理,否则进行另一种处理。
if ( 条件表达式 ) {
// 代码段1
} else {
// 代码段2
}

var k = 21;if(k%2===0){console.log(k+"是偶数");}else{console.log(k+"是奇数")}
注意:else是关键字,但是不能单独使用,必须和if结合使用。
if…else if语句也称为多分支语句,可针对不同情况进行不同的处理。
if ( 条件表达式1 ) {
// 代码段1
} else if ( 条件表达式2 ) {
// 代码段2
}
...
else if ( 条件表达式n ) {
// 代码段n
} else {
// 代码段n+1
}

/* 输入一个学生的成绩,输出成绩的等级>=90分 --- A>=80分 --- B>=70分 --- C>=60分 --- D<60分 --- E*/var s = prompt('请输入成绩')var k = null;if (s >= 90) {k = 'A';} else if (s >= 80 && s < 90) {k = 'B';} else if (s >= 70 && s < 80) {k = 'C';} else if (s >= 60 && s < 70) {k = 'D';} else {k = 'E';}console.log("等级为 ", k);
switch语句也是多分支语句,功能与if…else if语句类似,不同的是它只能针对某个表达式的值作出判断,从而决定执行哪一段代码。
switch ( 表达式 ) {
case 值1 代码段1; break;
case 值2 代码段2; break;
...
default: 代码段n;
}

var k = 40;switch (k % 2) { // k%2有0、1两种情况case 0: console.log(k + "是偶数!"); break; // 如果k%2=0,执行此语句case 1: console.log(k + "是奇数!"); break; // 如果k%2=1,执行此语句}
举例:查询水果的价格
使用多分支语句实现用户在弹出框中输入一个水果,如果有就弹出该水果的价格,如果该水果不存在就弹出“没有此水果”的效果。
var fruit = prompt('请您输入查询的水果:'); switch(fruit){case '苹果':alert('苹果的价格是 3.5/斤');break;case '榴莲':alert('榴莲的价格是 35/斤');break;case '香梨':alert('香梨的价格是 3/斤');break;default:alert('没有此水果') }举例:查询成绩等级
var s = prompt("请输入成绩");var k = nullswitch (parseInt(s / 10)) {case 10:case 9: k = 'A'; break;case 8: k = 'B'; break;case 7: k = 'C'; break;case 6: k = 'D'; break;default:k = 'E';}console.log("等级是: ", k);
5.1 条件运算符:?: 是一个三目运算符
5.2 条件表达式:表达式1?表达式2:表达式3
5.3 运算过程:先运算"表达式1",若结果为true,选择"表达式2"进行运算,并把"表达式2"的运算结果作为整个条件表达式的值;若"表达式1"的运算结果为false,选择"表达式3"进行运算,并把"表达式3"的运算结果作为整个条件表达式的值。
var t = prompt("请输入一个整数");t%2===0?console.log(t+'是偶数!'):console.log(t+'是奇数!')
'当'型循环,'当'条件为true时,执行循环;'当'条件为false时,结束循环。
它适合循环次数未知,但知道循环结束的条件的情况。
while(条件){
循环体语句;
}
//1+2+3+...+100var k = 1;var sum = 0;while (k <= 100) {sum += k;k++;}console.log("1+2+3+...+100=", sum);
//100内奇数和、偶数和——方法一var k = 1;var i = 2;var odd = 0;var even = 0;while (k <= 100) {if (k % 2 === 0) {odd += k;} else {even += k;}k++;}console.log("100内的偶数和:", odd);console.log("100内的奇数和:", even);
//100内奇数和、偶数和——方法二var k = 1;var i = 2;var odd = 0;var even = 0; while (k <= 100) {even += k;k = k + 2;}while (i <= 100) {odd += i;i = i + 2;}console.log("100内的偶数和:", odd);console.log("100内的奇数和:", even);
var i = 1;while (i <= 10) {if (i % 2 === 0) {break;}console.log(i);i++;}
var i = 1;while (i <= 10) {if (i % 2 === 0) {i++;continue;}console.log(i);i++;}
举例:判断素数
//判断素数:只能被1和它本身整除的数——方法一var n = prompt("请输入一个整数");var i = 2;var flag = true;while (i < n) {if (n % i === 0) { //用n除以2~n-1之间的每个数,若能整除,则n不是素数flag = false;break;}i++;}if (flag) {console.log(n + "是素数!");} else {console.log(n + "不是素数!");}//判断素数:只能被1和它本身整除的数——方法二var n = prompt("请输入一个整数");var i = 2;//var flag = true;while (i < n) {if (n % i === 0) { //用n除以2~n-1之间的每个数,若能整除,则n不是素数//flag = false;break;}i++;}if (i >= n) {console.log(n + "是素数!");} else {console.log(n + "不是素数!");}
'直到'循环,直到条件为假时退出循环。
它适合循环次数未知,但知道循环结束的条件的情况。
do{
循环体语句;
}while(条件);
// while语句// while (k > 0) {// console.log('flag:', flag);// k++;// }// console.log('k=', k); // 输出:k=0。不满足条件不进循环// do-while语句do {console.log('flag:', flag);// k++;} while (k !== 0)console.log('k=', k); // 输出:flag:true k= 0。不满足条件也会进一次循环
for语句是最常用的循环语句,它适合循环次数已知的情况。
for (初始化变量; 条件表达式; 操作表达式) {
// 循环体
};
// 1+2+...+100var i,sum=0;for(i=1;i<=100;i++){sum = sum+i;}console.log("sum=", sum);
案例:输出1000所有'水仙花'数
'水仙花'数 是一个三位数,每位数字的立方和等于这个数
即1的立方+5的立方+3的立方=153
for (var n = 100; n < 1000; n++) {var g = n % 10; //个位数var s = parseInt(n / 10) % 10; //十位数var b = parseInt(n / 100); //百位数if ((g * g * g + s * s * s + b * b * b) === n) {console.log(n);}}
初始化变量;
while(条件表达式){
循环体语句;
操作表达式;
}
断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后就可以控制代码一步一步的执行,在这个过程中可以看到每个变量当前的值。
查看方式:在Chrome浏览器中,按F12键启动开发者工具后,切换到“Sources”面板,界面效果如下图所示,其中右栏是JavaScript调试区。

在中栏显示的网页源代码中,单击某一行的行号,即可添加断点,再次单击,可以取消断点。例如,为for语句添加断点,如下图所示。

刷新即可看执行结果——执行到断点位置停止,然后可以控制代码一步一步的执行。
在一个循环的内部再套一个或多个循环
var i,j,s=0;
for(i=1;i<=10;i++) //外循环
{
for(j=1;j<=10;j++) //内循环
{
s++; // 输出:100
}
};
外循环每循环一次,内循环必须全部做完。
案例:九九乘法表
// console.log自带换行功能,而99乘法表需要在特定时换行,所以此时需要用到字符串的拼接var str = ''for (var i = 1; i < 10; i++) {for (var j = 1; j <= i; j++) {str += j + '*' + i + '=' + i * j + '\t';}str += "\n";}console.log(str);
案例:输出100内的所有素数
分析:100以内是循环(外循环);判断某个数是否是素数(内循环)
for (var n = 2; n <= 100; n++) { //外循环for (var j = 2; j < n; j++) { //内循环:判断当前的n是否是素数if (n % j === 0) { //如果n能被2~n-1之间的数整除,则n不是素数break; //终止内循环}}if (j >= n) { //n是素数console.log(n);}}
案例: 输出1000以内的所有'完数'
'完数'=它的所有因子之和
// 完数=这个数的所有因子之和for (var n = 1; n <= 1000; n++) {var sum = 0;for (var k = 1; k < n; k++) {if (n % k === 0) {sum += k;}}if (sum === n) {console.log(n);}}