案例描述

某游乐园的门票价格如表 3-3 所示。

表 3-3 某游乐园的票价方案

年龄大于等于 10 岁 年龄小于 10 岁

平日 300 140

周末 500 210

编写程序,让用户输入年龄和星期几,弹出对话框显示门票价格。星期几用阿拉伯数字 0、1、2、3、4、5、

6 表示,其中 0 表示周日。

 案例分析

本案例又是非常经典的双层 if 结构体嵌套的使用场景。当出现“大条件”套“小条件”的时候,需要使用

嵌套的 if 语句结构。本例又非常灵活,我们可以自由决定年龄和星期几谁是大条件,谁是小条件,所以我们提

出两种算法。

算法 1:星期作为大条件,年龄是小条件。即先判断用户输入的星期,然后判断年龄

算法 2:年龄作为大条件,星期是小条件。即先判断用户输入的年龄,然后判断星期

两种算法的效率是相同的,可以自由选择。

案例代码

算法 1 和算法 2 大同小异,仅仅是 if 语句的层级顺序不同而已。

算法 1 的程序代码如下:

//用户输入年龄

var age = Number(prompt("请输入年龄"));

//用户输入星期几

var weekday = Number(prompt("请输入星期几,0 表示星期日"));

//先判断星期几,然后判断年龄

if(weekday >= 1 && weekday <= 5){

if(age >= 10){

alert("300 元");

}else{

alert("140 元");

}

}else{

if(age >= 10){

alert("500 元");

}else{

alert("210 元");

}

}

算法 2 的程序代码如下:

//用户输入年龄

var age = Number(prompt("请输入年龄"));

//用户输入星期几

var weekday = Number(prompt("请输入星期几,0 表示星期日"));

//先判断星期几,然后判断年龄

if(age >= 10){

if(weekday >= 1 && weekday <= 5){

alert("300 元");

}else{

alert("500 元");

}

}else{

if(weekday >= 1 && weekday <= 5){

alert("140 元");

}else{

alert("210 元");

}

}

不管我们采用哪种算法思路,最终的执行结果相同的。

 switch 语句

基本使用

除了 if 语句结构之外,JavaScript 还提供了另外一种选择语句:switch 语句。switch 的英文意思是开

关,顾名思义,它能独立设置每条分支语句的“开关状态”。

例如:要求用户输入一个 0~6 的数字,显示这一天对应的中文星期几。即用户输入 0,显示“星期天”;输

入 1,显示“星期 1”,依此类推。

我们完全可以用已经学习过的 if 语句结构来实现程序,代码如下:

var weekDay = Number(prompt("请输入星期数字,0~6"));

if(weekDay == 0){

alert("星期天");

}else if(weekDay == 1){

alert("星期一");

}else if(weekDay == 2){

alert("星期二");

}else if(weekDay == 3){

alert("星期三");

}else if(weekDay == 4){

alert("星期四");

}else if(weekDay == 5){

alert("星期五");

}else if(weekDay == 6){

alert("星期六");

}

这段程序是正确的,但语句总是看起来“不优雅”。的确,程序中出现了非常多的 else if(weekDay == 某

值)这样的写法,让人透不过气。

switch 语句可以简化程序,代码如下:

//用户输入 0~6 的星期数

var weekDay = Number(prompt("请输入星期数字,0~6"));

//显示中文

switch(weekDay){

case 0 :

alert("星期日");

break;

case 1 :

alert("星期一");

break;

case 2 :

alert("星期二");

break;

case 3 :

alert("星期三");

break;

case 4 :

alert("星期四");

break;

case 5 :

alert("星期五");

break;

case 6 :

alert("星期六");

break;

default :

alert("请输入正确的星期");

}

switch()的圆括号中是一个值(而不是一个表达式),本例中是一个变量 weekDay,即用户输入的数字。

程序依次用 7 个 case 的值与 weekDay 进行比对,看哪条 case 的值和 weekDay 相等,如果相等则执行这个 case

分支的语句。

break 表示跳出 switch 语句块。注意,switch 语句并不像 if 语句那样当执行了某一个分支之后会自动跳

出 if 语句体,程序员必须主动调用 break 来跳出 switch 语句体。

default 表示默认的输出,即当没有任何 case 与 weekDay 相等的时候执行的语句。本例中如果没有任何

case 和用户输入的数字匹配,则表示用户输入的数字不正确,所以 default 中写了语句 alert("请输入正确的

星期")。