JavaScript语言基础:JS条件语句

第1关:if-else类型

任务描述

本关任务:根据成绩判断考试结果。

相关知识

在编程中,我们常常根据变量是否满足某个条件来执行不同的语句。

JavaScript中利用以if关键字开头的条件语句达到以上目的,根据if后面括号内表达式的计算结果来进行分支控制。

if语句

一段完整的JavaScript语句相当于一条主干路,从第一句开始执行直到最后一句。而if语句是一条连接在干路上的支路,满足某个条件时程序进入支路中执行,执行完后回到干路。如下所示:

条件成立指if后面的括号内的表达式的计算结果为true

if语句的结构为:

 
  1. if(表达式)
  2. {
  3. //上面的表达式成立则执行本语句
  4. 语句;
  5. }

比如下面的例子会根据a的正负输出相应的结果:

 
  1. //求一个数的绝对值
  2. function abs(a) {
  3. if(a < 0) {//如果a是负数
  4. a = -a;//取反
  5. }
  6. return a;
  7. }

if-else语句

if-else相当于干路分成了两条支路,程序执行遇到分支的时候,必须且只能选择其中一条继续执行,结束后回到干路。如下:

条件成立时执行语句1,这里的语句1是条件成立时你希望执行的语句,条件不成立时执行语句2

语句结构为:

 
  1. if(条件表达式)
  2. {
  3. //条件成立执行语句1
  4. 语句1;
  5. }
  6. else
  7. {
  8. //条件不成立执行语句2
  9. 语句2;
  10. }

下面是一个具体的例子:

 
  1. //a为正数或0返回1,a为负数返回0
  2. function num(a) {
  3. if(a >= 0) {
  4. return 1;
  5. }
  6. else {
  7. return 0;
  8. }
  9. }

匹配问题

多个if-else连接起来的时候会出现匹配问题,如下面的例子:

 
  1. function abs(a) {
  2. if(a >= 0)
  3. if(a > 0)
  4. a = 1;
  5. else
  6. a = -1;
  7. return a;
  8. }

从代码的缩进角度看来,程序中的else和第一个if实现了匹配。但是,实际上else匹配的是第二个if,因为JavaScript中的else遵循的是就近匹配,即else会和最近的if组合成一个完整的if-else结构。

建议:if语句执行部分加{},防止出现 if-else不匹配问题。

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 根据分数a(百分制)返回考试结果;

  • a小于60分返回unpass,否则返回pass

  • 本题考察非嵌套的if-else语句;

  • 具体请参见后续测试样例。

测试说明

测试过程:

  • 平台将读取用户补全后的IfElse.js

  • 调用其中的mainJs()方法,并输入若干组测试数据;

  • 接着根据测试结果判断程序是否正确。

以下是测试样例:

测试输入: 59 预期输出: unpass

测试输入: 90 预期输出: pass
 

function mainJs(a) {
    a = parseInt(a);
	//请在此处编写代码
	/********** Begin **********/
    if(a<60){
        return "unpass" ;
    }
	else{
        return "pass"  ;
    }
    
	/********** End **********/
}


第2关:switch类型

任务描述

北美五大湖的名称和面积如下:

名称面积(平方公里)
Superior82414
Huron59600
Michigan58016
Erie25744
Ontario19554

本关任务:根据面积判断湖泊的名字。

相关知识

上一关讲解的是拥有少数分支的if-else结构,实际开发的过程中,还会遇到多分支的情况,比如根据电话号码判断运营商,如果用if-else型条件语句,代码会很长而且难以理解。所幸的是,JavaScript提供了另外一种选择结构:switch语句。

严格相等

在了解switch语句之前,先要知道严格相等的概念,严格相等的符号为===

对于JavaScript中的内置数据类型,如数字,字符串,布尔型等。严格相等要求比较双方的数据类型和值都相等,而相等==只要求比较双方的值相等,因为可以进行数据类型转换。例子如下:

 
  1. var string = "1";
  2. var number1 = 1;
  3. var number2 = 1;
  4. console.log(string === number1);
  5. console.log(number1 === number2);

输出结果: false true

对于JavaScript中的对象类型,严格相等要求双方的引用相同,即必须是同一个对象。如果不是同一个对象,即使双方的属性、值都相同,也被认为不等,比如下面的例子:

 
  1. var class1 = {
  2. id:251,
  3. name:"class"
  4. }
  5. var class2 = {
  6. id:251,
  7. name:"class"
  8. }
  9. var class3 = class1;
  10. console.log(class2 === class1);
  11. console.log(class3 === class1);

输出结果:

false true

虽然class1class2的属性名、属性值都相等,但是不满足严格相等,因为它们是不同的对象,指向内存的不同地方。而class3class1严格相等,因为它们指向内存的同一个地方。

switch语句

switch是一种多分支的选择结构,采用等值判断,如下是结构图,其中T表示条件成立,F表示条件不成立,箭头表示语句的执行方向。

switch语句的语法如下:

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

括号中的表达式计算后会得到一个值,该值会从上到下依次与case关键字后面的值比较,如果满足严格相等,则执行相应case后面的语句;如果与所有的值都不满足严格相等,则执行default关键字后的语句。

当和case后面的某一个值完成匹配并执行完语句后,需要用break结束整个的switch选择,否则会与后面的继续匹配。

 
  1. //函数(方法):根据身份证号前两位判断所在省份
  2. function judgeProvince(idCard) {
  3. switch(idCard) {
  4. case 31:console.log("上海");
  5. break;
  6. case 32:console.log("江苏");
  7. break;
  8. case 33:console.log("浙江");
  9. break;
  10. case 34:console.log("安徽");
  11. break;
  12. case 35:console.log("福建");
  13. break;
  14. case 36:console.log("江西");
  15. break;
  16. case 37:console.log("山东");
  17. break;
  18. default:console.log("未知");
  19. break;
  20. }
  21. }
  22. //调用上面的函数
  23. judgeProvince(36);//输出“江西”

如果不加break,代码会从满足switch条件的地方开始执行,一直执行到最后,不符合的case后面的语句也会被执行。

下面的例子根据输入的分数计算绩点(GPA)

 
  1. //函数(方法):根据百分制的成绩计算GPA
  2. function calGrade(grade) {
  3. grade = parseInt(grade/10);//除以10后取整数
  4. var gpa;
  5. switch(grade) {
  6. case 10://注意这后面没有break
  7. case 9: gpa = 4;break;//90到100均为4
  8. case 8: gpa = 3;break;
  9. case 7: gpa = 2;break;
  10. case 6: gpa = 1;break;
  11. default: gpa = 0;break;
  12. }
  13. return gpa;
  14. }
  15. //调用上面的函数
  16. console.log(calGrage(100));//输出4

grade10的时候,没有break,会往下一直执行;执行到grade9的时候,有break,会终止switch语句块,此时 gpa被赋值4,所以90100分的返回值都是4

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 根据面积参数a返回湖泊的名字,湖泊的名称和面积的对照表在最上面的任务描述里面,这里不再赘述;

  • 没有对应的湖泊返回error

  • 具体请参见后续测试样例。

测试说明

测试过程:

  • 平台将读取用户补全后的SwitchSeten.js

  • 调用其中的mainJs()方法,并生成若干组测试数据;

  • 接着根据测试结果判断程序是否正确。

以下是测试样例:

测试输入: 82414 预期输出: Superior

function mainJs(a) {
    a = parseInt(a);
	//请在此处编写代码
	/********** Begin **********/
        switch(a)
    {
        case 82414 :return  "Superior" ; 
        break;
        case 59600 :return "Huron" ;
        break;
        case 58016 :return "Michigan";
        break;
        case 25744 :return "Erie";
        break;
        case 19554 :return "Ontario";
        break;

        default: return "error" ;
        break;
    }   
	/********** End **********/
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值