JavaScript基础(二)
一、流程控制
通过控制代码的执行顺序来完成要实现的功能,流程控制的3种结构如下:
- 顺序结构是程序中最基本的结构,程序会按照代码的先后顺序依次执行
- 分支结构用于根据条件来决定是否执行某个分支代码
- 循环结构用于根据条件来决定是否重复执行某一段代码
二、分支结构(选择结构)
1、if语句:也称为条件语句、单分支语句,当满足某种条件时,就进行某种处理
if ( 条件表达式 ) {
// 代码段
}
2、if…else语句:也称为双分支语句,当满足某种条件时,就进行某种处理,否则进行另一种处理
if ( 条件表达式 ) {
// 代码段1
} else {
// 代码段2
}
(1)else不能单独使用,必须和if结合使用
(2)'{}'表示控制范围,在没有'{}'时,if、else只能控制其后的第一条语句
案例:输入一个年份,判断它是闰年还是平年
A、年份能被400整除
B、年份能被4整除,但不能被100整除
var y = prompt("请输入年份")
var year = parseInt(y)
if(year%100!=0 && year%4==0 || year%400==0){
console.log(year+"是闰年")
}
else{
console.log(year+"平年")
}
3、 if…else里嵌套if…else语句
if(条件表达式1)
{
if(条件表达式2)
{
代码段1
}else{
代码段2
}
}else{
代码段3
}
A、当"条件表达式1"为true,"条件表达式2"也为true时,执行"代码段1"
B、当"条件表达式1"为true,"条件表达式2"也为false时,执行"代码段2"
C、当"条件表达式1"为false,执行"代码段3"
4、if…else if语句:也称为多分支语句,可针对不同情况进行不同的处理
if ( 条件表达式1 ) { // 代码段1 }
else if ( 条件表达式2 ) { // 代码段2 }
...
else if ( 条件表达式n ) { // 代码段n } else { // 代码段n+1 }
执行过程:依次对"条件表达式"进行判断,某一个"条件表达式"为true,则执行其后的代码段
若所有的"条件表达式"都为false,并且存在else结构,则执行else后的代码段
案例:输入学生成绩,判断成绩的等级
90分以上(含90分)等级为A
80~90(含80分)等级为B
70~80(含70分)等级为C
60~70(含60分)等级为D
60分以下等级为E
var score = prompt("请输入学生成绩")
var s = parseInt(score)
if(s >= 90){
console.log("等级为A")
}else if(s >= 80){
console.log("等级为B")
}else if(s >= 70){
console.log("等级为C")
}else if(s >= 60){
console.log("等级为D")
}else{
console.log("等级为E")
}
5、条件表达式构成的选择结构:表达式1?表达式2:表达式3
if(表达式1)
{
表达式2
}else{
表达式3
}
6、switch语句:也是多分支语句,功能与if…else if语句类似,不同的是它只能针对某个表达式的值作出判断,从而决定执行哪一段代码
switch ( 表达式 ) {
case 值1
代码段1;
break;
case 值2
代码段2;
break;
...
default:
代码段n;
}
(1)、语法要求
- case后必须是常量
- break的作用是跳出switch…case结构
- default可以有也可以没有,位置任意,建议放在所有case之后
(2)、执行过程
- 第一步:运算"表达式"
- 第二步:将"表达式"的值和case后的常量进行比较,若相等则执行其后的代码段
- 第三步:若"表达式"的值和所有case后的常量都不等,且存在default代码段, 则执行其后的代码段
案例
①将判断成绩等级的示例改为switch…case结构
var score = prompt("请输入成绩")
var x = parseInt(score/10)
switch(x){
case 10:
case 9:
console.log("等级为A")
break;
case 8:
console.log("等级为B")
break;
case 7:
console.log("等级为C")
break;
case 6:
console.log("等级为D")
break;
default:
console.log("等级为E")
}
②使用多分支语句实现用户在弹出框中输入一个水果,如果有就弹出该水果的价格,如果该水果不存在就弹出“没有此水果”的效果
var fruit = prompt('请您输入查询的水果:');
switch(fruit){
case '苹果':
alert('苹果的价格是 3.5/斤');
break;
case '榴莲':
alert('榴莲的价格是 35/斤');
break;
case '香梨':
alert('香梨的价格是 3/斤');
break;
default:
alert('没有此水果')
}
③输入年、月、日,输出:
(1)月份属于哪个季节(3~5是春季、6~8是夏季、9~11是秋季、12、1、2是冬季)
(2)日期是该年中第几天
//判断年月日
var year=prompt("请输入年份");
var month=prompt("请输入月份");
var day=prompt("请输入日期");
y = parseInt(year)
m = parseInt(month)
d = parseInt(day)
//年月日输入是否输入正确
if(m < 1 || m > 12 || y < 0 || d < 1 || d > 31){
console.log("语法错误");
}else{
//判断月份
switch(m){
case 12:
case 1:
case 2:
console.log(m+"=winter")
break;
case 3:
case 4:
case 5:
console.log(m+"=spring")
break;
case 6:
case 71:
case 8:
console.log(m+"=summer")
break;
case 9:
case 10:
case 11:
console.log(m+"=autumn")
break;
}
//判断日子和
var sum = 0;
var i = 1;
while(i < m){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
sum += 31;
break;
case 4:
case 6:
case 9:
case 11:
sum += 30;
break;
case 2:
if(((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)){
sum = sum + 29;
}else{
sum = sum + 28;
}
default :
break;
}
i++;
}
sum = sum + d;
console.log("是今年的第"+sum+"天");
}
三、循环结构
循环结构:重复结构(迭代结构),根据条件重复代码段
1、while循环: "当"循环,即"当"条件为true时,执行循环体语句,直到条件表达式为false时结束循环。
while (条件表达式) {
// 循环体
}
(1)、语法要求
- while是一个关键字
- "条件表达式"的运算结果为true/false,必须用’()'括起来
- '{}'表示的是循环的控制范围
(2)、执行过程
- 第一步:运算"条件表达式"
- 第二步:若"条件表达式"的值为true,则跳转到第三步,若"条件表达式"的值为false,则跳转到第四步
- 第三步:执行一次"代码段",跳转到第一步
- 第四步:退出循环结构
案例
①输出所有的"水仙花"数("水仙花"数是一个三位数,每位数字的立方和等于该数)
var a,b,c;
var i = 100;
while(i < 1000){
var a = parseInt(i%10);
var b = parseInt((i/10)%10);
var c = parseInt(i/100);
if(i == a*a*a + b*b*b +c*c*c){
console.log("1000以内的水仙花数为:"+i);
}
i++;
}
②计算斐波拉契数列的前20项之和
斐波拉契数列: 1 1 2 3 5 8 13 21…
var sum = 0;
var a = 1;
var b = 1;
var t;
count = 1;
while(count <= 18){
sum = sum + a + b;
t = a + b;
a = b;
b = t;
count++;
}
console.log("sum="+sum);
2、do-while循环:"直到"型循环
语法格式
do{
循环体语句
}while(条件表达式);
A、do是关键字,不能单独使用
B、先执行"循环体语句",直到"条件表达式"为假时,退出循环
C、无论"条件表达式"是否为真,"循环体语句"至少执行一次
案例
//do-while的用法(注意与while的区别)
var i = 1;
var sum = 0;
do{
sum = sum + i;
i++;
}while(i <= 100)
console.log("sum="+sum);
3、for循环
(1)语法格式:
for(表达式1;表达式2;表达式3)
{
循环体语句
}
- “表达式1”:初始化语句(通常用来初始化循环变量)
- “表达式2”:条件表达式(决定循环是否执行)
- “表达式3”:使循环趋向结束的表达式
(2)注意的问题:三个表达式都可以省略,但是分号不能省略
建议:当循环次数明确建议使用for循环;当循环次数不明确,但是知道循环结束的条件时建议使用while或do-while循环
案例
//计算斐波那契数列前二十项和(for循环)
var a = 1;
var b = 1;
var sum = a + b;
var t;
for(var i = 1;i <= 18;i++){
t = a + b;
a = b;
b = t;
sum = sum + t;
}
console.log("sum="+sum);
4、循环嵌套:在一个循环的内部嵌套一个或多个循环
s = 0
for(i=1;i<=10;i++) -->外循环
{
for(j=1;j<=10;j++) -->内循环
{
s++
}
}
s = 100
外循环每循环一次,内循环要全部做完
案例①输出100以内的所有素数
var i;
var j;
for(i = 2;i <= 100;i++){ //外循环
for(j = 2;j < i;j++){ //内循环:判断素数
if(i % j ==0){
break; //终止内循环
}
}
if(j >= i){ //这条语句意为:内循环里面都不满足之后退出来,那么这个得到的i就是一个素数
console.log("100以内所有素数为"+i);
}
}
②计算1!+2!+3!+…+10!
var sum = 0;
for(var i = 1;i <= 10;i++){
var s = 1;
for(j = 1;j <= i;j++){
s = s * j;
}
sum = sum + s;
}console.log("阶乘之和为:"+sum);
5、break;语句:终止循环
//break语句的用法:终止循环,当满足条件时,跳出整个循环
// var i = 1;
// while(i <= 10){
// if(i % 2 == 0){
// break;
// }
// console.log("i="+i);
// i++;
// }
6、continue;语句:结束本次循环,直接进入下一次循环
//continue的用法:终止本次循环,直接进入下一次循环
// var i = 1;
// while(i <= 10){
// if(i % 2 != 0){
// i++; //i++语句避免了执行完continue之后进入死循环
// continue;
// }
// console.log("i="+i);
// i++; //这个i++也不能少
// }