2.3 条件判断

除了第1章中简单介绍过的if语句,JavaScript还提供了几种其他条件判断机制,我们也应该了解一下。

你有时可能会编写出一系列的if..else..if语句,如下所示:

        if (a == 2) {
            // 做某件事情
        }
        else if (a == 10) {
            // 做另一件事情
        }
        else if (a == 42) {
            // 做另一件事情
        }
        else {
            // 反馈到这儿
        }

这样的结构可以运行,但是有点繁复,因为你需要为每种情况都指定一个测试。switch语句是另一种选择:

        switch (a) {
            case 2:
              // 做某件事情
              break;
            case 10:
              // 做另一件事情
              break;
            case 42:
              // 做另一件事情
              break;
            default:
              // 反馈到这儿
        }

如果只想要运行某个case下的语句,那么break是很重要的。如果某个case省略了break,而这个case匹配或运行的话,那么会一直执行到下一个case的语句,不管那个case是否匹配。这种所谓的“通过(fall through)”有时是很有用的。

        switch (a) {
            case 2:
            case 10:
              // 某个很棒的东西
              break;
            case 42:
              // 其他东西
              break;
            default:
              // 反馈
        }

在上述示例中,如果2或者10匹配的话,那么就会执行“某个很棒的东西”代码语句。

在JavaScript中,条件判断的另一种形式是“条件运算符”,通常被称为“三进制运算符”。它更像是单个if..else语句的紧凑版,如下所示:

        var a = 42;


        var b = (a > 41) ? "hello" : "world";


        // 与以下类似:


        // if (a > 41) {
        //    b = "hello";
        // }
        // else {
        //    b = "world";
        // }

如果条件表达式(这里是a > 41)求值为真,那么就会返回第一个子句("hello");否则,结果就是第二个子句("world"),不论结果是什么,都会赋给b。

条件运算符并不一定要用在赋值上,但这肯定是最常见的用法。

有关switch和? :的测试条件及其他模式的更多信息,参见本系列中的《你不知道的JavaScript(中卷)》第一部分。