购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 控制语句

结构化程序设计中的控制语句有三种,即顺序、分支和循环语句,而且只能用这三种结构来完成程序。JavaScript程序通过控制语句来执行程序流,完成一定的任务。程序流是由若干个语句组成的,语句可以是单一的一条语句,也可以是用大括号{}括起来的多条语句。JavaScript中的控制语句有以下几类:

(1)分支语句:if-else、switch。

(2)循环语句:while、do-while、for。

(3)与程序转移有关的跳转语句:break、continue、return。

2.7.1 分支语句

分支语句提供了一种控制机制,使得程序具有了“判断能力”,能够像人类的大脑一样分析问题。分支语句又称条件语句,条件语句使部分程序可根据某些表达式的值被有选择地执行。

1.条件语句if-else

由if语句引导的选择结构有if结构、if-else结构和else if结构三种。

如果条件表达式为“真”就执行语句组,否则就执行if结构后面的语句。语句组是单句时大括号可以省略。语法结构:

    //if结构
    if(条件表达式){
          语句组; 
    }
    
    //if…else结构
    if(条件表达式) {
        语句组1; 
    } [else {
        语句组2 }]//中括号内容可以省略
    
    //if…else结构
    if(条件表达式1)
        语句组1;
    else if(条件表达式2)
        语句组2;
    else if(条件表达式3)
        语句组3;
    …
    else if(条件表达式n)
        语句组n;
    else 
        语句组n+1;

条件语句if-else实例代码 如下:

    var score=95;
    
    console.log('------ if结构示例-------');
    if (score >=85) {
        console.log("您真优秀!");
    }
    
    if (score < 60) {
        console.log("您需要加倍努力!");
    }
    
    if (score >=60 && score < 85) {
        console.log("您的成绩还可以,仍需继续努力!");
    }
    
    console.log('------ if-else结构示例------');
    if (score < 60) {
        console.log("不及格");
    } else {
        console.log("及格");
    }
    
    console.log('------else if结构示例------');
    
    var testscore=76;
    var grade;
    
    if (testscore >=90) {
        grade='A';
    } else if (testscore >=80) {
        grade='B';
    } else if (testscore >=70) {
        grade='C';
    } else if (testscore >=60) {
        grade='D';
    } else {
        grade='F';
    }
    console.log("Grade=" + grade);

运行结果如下:

    ------ if结构示例-------
    您真优秀!
    ------ if-else结构示例------
    及格
    ------else if结构示例------
    Grade=C

2.多分支语句switch

switch语句也称开关语句,它引导的选择结构也是一种多分支结构。具体内容如下:

    switch(条件表达式){
        case 判断值1: 语句组1 
        case 判断值2: 语句组2 
        case 判断值3: 语句组3 
        …
        case 判断值n: 语句组n 
        default: 语句组n+1 
    }

当程序执行到switch语句时,先计算条件表达式的值,假设值为A,然后拿A与第1个case语句中的判断值相比,如果相同则执行语句组1,否则拿A与第2个case语句中的判断值相比,如果相同则执行语句组2,以此类推,直到执行语句组n。如果所有的case语句都没有执行就执行default的语句组n+1,这时才跳出switch引导的选择结构。

switch语句需要注意如下问题:

(1)case子句中的值必须是常量,而且所有case子句中的值应是不同的。

(2)default子句是可选的。

(3)break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行(在一些特殊情况下,多个不同的case值要执行一组相同的操作,这时可以不用break)。

实例代码如下:

    var date=new Date();
    var month=date.getMonth();
    
    switch (month) {
        case 0:
            console.log("January");
            break;
        case 1:
            console.log("February");
            break;
        case 2:
            console.log("March");
            break;
        case 3:
            console.log("April");
            break;
        case 4:
            console.log("May");
            break;
        case 5:
            console.log("June");
            break;
        case 6:
            console.log("July");
            break;
        case 7:
            console.log("August");
            break;
        case 8:
            console.log("September");
            break;
        case 9:
            console.log("October");
            break;
        case 10:
            console.log("November");
            break;
        case 11:
            console.log("December");
            break;
        default:
            console.log("Invalid month.");
    }

如果当前的月份是7月,则程序的运行结果如下:

    July

但是,如果case 7没有break语句,程序又是什么结果呢?结果会是输出:

    July
    August

由于没有break,程序会继续运行下去。不管有没有case语句,直到遇到一个break语句才跳出switch语句。

2.7.2 循环语句

循环语句使语句或代码块的执行得以重复进行。JavaScript支持三种循环构造类型:for、while和do-while,for和while循环是在执行循环体之前测试循环条件,而do-while是在执行完循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行,而do-while将至少执行一次循环体。

1.while语句

while语句是一种先判断的循环结构。语句格式如下:

    [initialization]
    while (termination){
        body;
        [iteration;]
    }

其中,中括号部分可以省略,后面不再特别说明。

下面的程序代码是通过while实现了查找平方小于100000的最大整数:

    var i=0;
    
    while (i * i < 100000) {
        i++;
    }
    console.log(i + " " + i * i);

结果是输出317 100489。这段程序的目的是找到平方数小于100000的最大整数。使用while循环需要注意几点,while循环语句中只能写一个表示式,而且是一个布尔型表达式,那么如果循环体中需要循环变量,就必须在while语句之前做好处置的处理,如上例中先给i赋值为0,其次在循环体内部,必须通过语句更改循环变量的值,否则将会发生死循环。

2.do-while语句

do-while语句的使用与while语句的使用相似,不过do-while语句是后判断的循环结构。语句格式如下:

    [initialization]
    do {
        body;
        [iteration;]
    } while (termination);

下面的程序代码是使用do-while实现了查找平方小于100000的最大整数:

    var i=0;
    do{
        i++;
    } while   (i * i < 100000)
    console.log(i + " " + i * i);

结果是输出317100489。当程序执行到do-while语句时,首先无条件执行一次循环体,然后计算条件表达式,它的值必须是布尔型,如果值为“真”,则再次执行循环体,然后到条件表达式准备再次判断,如此反复,直到条件表达式的值为“假”时跳出do-while循环。

3.for语句

for语句是应用最为广泛的一种循环语句,也是功能最强的一种。一般格式如下:

    for (初始化; 终止; 迭代){
        body;
    }

当程序执行到for语句时,先执行初始化语句,它的作用是初始化循环变量和其他变量,如果它含有多个语句就用逗号隔开。然后程序计算循环终止语句的值,终止语句的值必须是个布尔值,所以可以用逻辑运算符组合成复杂的判断表达式,如果它的值为“真”,程序继续执行循环体,执行完成循环体后计算迭代语句,之后返回到终止语句准备再次进行判断,如此反复,直到终止语句的值为“假”时跳出循环。如果表达式的值为“假”,则直接跳出for循环。终止语句一般用来改变循环条件,它可对循环变量和其他变量进行操作,它和初始化语句一样也可有多个语句,并以逗号相隔。

下面的程序代码是使用for循环实现平方表:

    var i;
    console.log("n   n*n");
    console.log("---------");
    for (i=1; i < 10; i++) {
        console.log(i + " " + i * i);
    }

运行结果如下:

    n   n*n
    ---------
    1 1
    2 4
    3 9
    4 16
    5 25
    6 36
    7 49
    8 64
    9 81

这个程序的循环部分初始时,给循环变量i赋值为1,每次循环实现判断i的值是否小于10,如果是就执行循环体,然后给i加1,因此,最后的结果是打印出从1到9的平方。

for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。

初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。

空的for语句示例:

    for(; ;){
        …
    }

在初始化部分和迭代部分可以使用逗号语句来进行多个操作。逗号语句是用逗号分隔的语句序列,如下所示:

    for (i=0, j=10; i < j; i++, j--) {
      …
    }

循环语句与条件语句一样,如果循环体中只有一条语句,可以省略大括号,但是从程序的可读性角度考虑,不要省略括号。

4.for…in语句

for…in语句可以帮助我们方便地遍历数组或集合对象。一般格式如下:

    for (循环变量 in 数组或集合对象){
        …
    }

下面的程序代码是使用for语句实例:

    var numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    for (var i=0; i < numbers.length; i++) {
        console.log("Count is: " + numbers[i]); 
    }

下面的程序代码是使用for…in语句实例:

    var numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    for (var item  in numbers) {
        console.log("Count is: " +numbers[item]);
    }

从上例的对比中发现,item是循环变量,而不是集合中的元素,in后面是数组或集合对象。for…in语句在遍历集合的时候要简单方便得多。

2.7.3 跳转语句

跳转语句主要有break语句、continue语句和return语句,并且return语句同时也是返回语句。

1.break语句

break语句可用于switch引导的分支结构以及以上三种循环结构,它的作用是强行退出循环结构,不执行循环结构中剩余的语句。break语句有带标签和不带标签两种。

break语句格式如下:

    break;          //不带标签
    break label;    //带标签,label是标签名

标签是后面跟一个冒号的标识符。不带标签的break语句使程序跳出它所在那一层的循环结构,而带标签的break语句使程序跳出标签指示的循环结构。

不带标签的break语句示例:

    var numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
    for (var i=0; i < numbers.length; i++) {
        if (i==3) {
            break;
        }
        console.log("Count is: " + i);
    }

在上例中当条件i==3的时候执行break语句,程序运行结果如下:

    Count is:0
    Count is:1
    Count is:2

当循环遇到break语句的时候,就会终止循环。

带标签的break语句示例:

    var arrayOfInts=[
        [ 32, 87, 3, 589],
        [ 12, 1076, 2000, 8 ],
        [622, 127, 77, 955]
    ];
    
    var searchfor=12;
    var i, j=0;
    var foundIt=false;
    
    search:for (i=0; i < arrayOfInts.length; i++) {
        for (j=0; j < arrayOfInts[i].length; j++) {
            if (arrayOfInts[i][j]==searchfor) {
                foundIt=true;
                break search;
            }
        }
    }
    
    if (foundIt) {
        console.log("找到元素 " + searchfor + " 在第" + i + "行, 第" + j + "列");
    } else {
        console.log(searchfor + "在数组中没有找到!");
    }

程序运行结果如下:

    找到元素12在第1行,第0列

2.continue语句

continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。

continue语句格式如下:

    continue;          //不带标签
    continue label;    //带标签,label是标签名

不带标签的continue语句示例:

    var numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
    for (var i=0; i < numbers.length; i++) {
        if (i==3) {
            continue;
        }
        console.log("Count is:" + i);
    }

在上例中当条件i==3的时候执行continue语句,程序运行结果如下:

    Count is:0
    Count is:1
    Count is:2
    Count is:4
    Count is:5
    Count is:6
    Count is:7
    Count is:8
    Count is:9

当循环遇到continue语句的时候,终止本次循环,在循环体中continue之后的语句将不再执行,接着进行下次循环,所以输出结果中没有3。

带标签的continue语句示例:

    var n=0;
    outer:for (var i=101; i < 200; i++) {             //外层循环
        for (var j=2; j < i; j++) {                       //内层循环
            if (i % j==0) {
                continue outer; ①
            }
        }
        console.log("i=" + i);
    }

在上例中程序运行结果如下:

    i=101
    i=103
    …
    i=199

素数就是一个只能够被1和其自身整除的数,上述代码第①行的作用就是这个数如果能够被非1和非自身整除的时候,就终止本次循环。这里的continue语句不能换成break语句,那是因为如果是break语句,程序第一次满足条件进入if语句时会终止外循环,程序不会再循环了,只有使用continue语句才可以满足需要。

3.返回语句return

return语句可以在当前函数中退出,返回到调用该函数的语句处。返回语句有两种格式: pdFxKSLveA1MsuGYCCVbXfUeYjGwvQEuZdnCEEFfCwypz+wWD7t3rYAwmqn0Nrxq

    return expression ;
    return;
点击中间区域
呼出菜单
上一章
目录
下一章
×