除了我们在第一章中简要介绍过的if
语句,JavaScript还提供了几种其他值得我们一看的条件机制。
有时你可能发现自己在像这样写一系列的if..else..if
语句:
if (a == 2) {
// 做一些事情
}
else if (a == 10) {
// 做另一些事请
}
else if (a == 42) {
// 又是另外一些事情
}
else {
// 这里是备用方案
}
这种结构好用,但有一点儿繁冗,因为你需要为每一种情况都指明a
的测试。这里有另一种选项,switch
语句:
switch (a) {
case 2:
// 做一些事情
break;
case 10:
// 做另一些事请
break;
case 42:
// 又是另外一些事情
break;
default:
// 这里是备用方案
}
如果你想仅让一个case
中的语句运行,break
是很重要的。如果你在一个case
中省略了break
,并且这个case
成立或运行,那么程序的执行将会不管下一个case
语句是否成立而继续执行它。这种所谓的“掉落”有时是有用/期望的:
switch (a) {
case 2:
case 10:
// 一些很酷的事情
break;
case 42:
// 另一些事情
break;
default:
// 备用方案
}
这里,如果a
是2
或10
,它就会执行“一些很酷的事情”的代码语句。
在JavaScript中的另一种条件形式是“条件操作符”,经常被称为“三元操作符”。它像是一个单独的if..else
语句的更简洁的形式,比如:
var a = 42;
var b = (a > 41) ? "hello" : "world";
// 与此相似:
// if (a > 41) {
// b = "hello";
// }
// else {
// b = "world";
// }
如果测试表达式(这里是a > 41
)求值为true
,那么就会得到第一个子句("hello"
),否则得到第二个子句("world"
),而且无论结果为何都会被赋值给b
。
条件操作符不一定非要用于赋值,但是这绝对是最常见的用法。
注意: 关于测试条件和switch
与? :
的其他模式的更多信息,参见本系列的 类型与文法。