除了我们在第一章中简要介绍过的if语句,JavaScript还提供了几种其他值得我们一看的条件机制。

    有时你可能发现自己在像这样写一系列的if..else..if语句:

    1. if (a == 2) {
    2. // 做一些事情
    3. }
    4. else if (a == 10) {
    5. // 做另一些事请
    6. }
    7. else if (a == 42) {
    8. // 又是另外一些事情
    9. }
    10. else {
    11. // 这里是备用方案
    12. }

    这种结构好用,但有一点儿繁冗,因为你需要为每一种情况都指明a的测试。这里有另一种选项,switch语句:

    1. switch (a) {
    2. case 2:
    3. // 做一些事情
    4. break;
    5. case 10:
    6. // 做另一些事请
    7. break;
    8. case 42:
    9. // 又是另外一些事情
    10. break;
    11. default:
    12. // 这里是备用方案
    13. }

    如果你想仅让一个case中的语句运行,break是很重要的。如果你在一个case中省略了break,并且这个case成立或运行,那么程序的执行将会不管下一个case语句是否成立而继续执行它。这种所谓的“掉落”有时是有用/期望的:

    1. switch (a) {
    2. case 2:
    3. case 10:
    4. // 一些很酷的事情
    5. break;
    6. case 42:
    7. // 另一些事情
    8. break;
    9. default:
    10. // 备用方案
    11. }

    这里,如果a210,它就会执行“一些很酷的事情”的代码语句。

    在JavaScript中的另一种条件形式是“条件操作符”,经常被称为“三元操作符”。它像是一个单独的if..else语句的更简洁的形式,比如:

    1. var a = 42;
    2. var b = (a > 41) ? "hello" : "world";
    3. // 与此相似:
    4. // if (a > 41) {
    5. // b = "hello";
    6. // }
    7. // else {
    8. // b = "world";
    9. // }

    如果测试表达式(这里是a > 41)求值为true,那么就会得到第一个子句("hello"),否则得到第二个子句("world"),而且无论结果为何都会被赋值给b

    条件操作符不一定非要用于赋值,但是这绝对是最常见的用法。

    注意: 关于测试条件和switch? :的其他模式的更多信息,参见本系列的 类型与文法