3.1.3 测试多个条件

有时候,我们想要测试多个条件并且拥有几种可能的输出。考虑这样一个游戏,主持人对你说:“你想要1号门、2号门还是3号门背后的奖金?”你只能选择其中之一。在日常活动中,我们也经常面对像这样的多个条件选择。

例如,回到“我星期五晚上干什么”的问题。你可能根据自己有多少钱以及愿意花多少钱来增加娱乐项目。例如,你可以这样开始,“如果我有超过50块钱,我就到外面好好吃一顿并看场电影(并且买点爆米花)”。如果没有50块钱,你可能会尝试另一个测试“如果我有35块钱或更多,我就好好地吃一顿”。如果没有35块钱,你可能会说:“如果我有12块钱或者更多,我就去看场电影。”最后,如果没有12块钱,你可能会说:“那我就待在家里看电视。”多么美妙的一个星期五晚上啊。

JavaScript允许我们使用else if语句执行同样的层叠逻辑。它像这样工作:从一条if语句开始,其选项为1号;然后,添加1个或多个else if语句,来提供可以触发其他选项的其他问题;最后,使用else子句作为退路。下面是其在JavaScript中的基本结构:


if(condition){

//door#1

}else if(condition2){

//door#2

}else{

//door#3

}


这个结构是我们创建一个JavaScript“星期五之夜计划”程序所需要的所有内容。它询问访问者有多少钱,然后确定他们应该在星期五做什么(听起来有些熟悉吧)。我们可以使用在本书2.7节的教程中所学习的prompt()命令来收集访问者的反馈,并且使用一系列的if/else if语句来确定他应该做什么:


var fridayCash=prompt('How much money can you spend?’,’');

if(fridayCash>=50){

alert('You should go out to a dinner and a movie.');

}else if(fridayCash>=35){

alert('You should go out to a fine meal.');

}else if(fridayCash>=12){

alert('You should go see a movie.');

}else{

alert('Looks like you will be watching TV.');

}


下面是对这个程序分步骤的分析:第一行代码打开一个提示对话框,询问访问者可以花费多少钱。访问者输入的内容将存储在名为fridayCash的变量中。下一行代码是一个测试:访问者输入的值是否大于或等于50?如果答案是肯定的,那么出现一个警告框,告诉他去吃顿饭并看场电影。此时,整个条件语句就完成了。JavaScript解释器略过下一条else if语句,接下来的else if语句,以及最后的else子句。使用条件语句,只会发生一种结果,因此,一旦JavaScript解释器遇到计算为true的一个条件,那么它为该条件运行花括号之间的JavaScript代码,并且略过条件语句中的其他所有内容(参见图3-4)。

假设访问者输入的是25。在这个例子中,第一个条件将不为true,因为25是一个小于50的数值。因此,JavaScript解释器跳过了针对第一个条件的花括号中的代码,并且继续“25是否大于等于35”的else if语句。既然答案为false,它跳过和这个条件相关的代码,并且遇到下一个else if语句。此时,条件询问“25是否大于等于12”,答案是true,因此,出现一个带有“You should go see a movie”消息的警告框并且程序结束,略过最终的else子句。

提示:还有另一种方式可以创建都测试同一个变量的一系列的条件语句,就像是在fridayCash示例中那样。switch语句可以做同样的事情,将在14.6.3节学习它。

3.1.3 测试多个条件 - 图1

图 3-4 使用一条基本的条件语句,如果条件为true,则只运行花括号之间的代码;如果条件为false,则略过该段代码,并且程序继续