switch
此页面需较新浏览器(支持 SharedArrayBuffer)。请升级 Chrome、Edge、Firefox 或 Safari 至最新版本。
switch 选出一个 case
switch把一个值和几个可能的匹配项比较,这些匹配项叫作 case。- 当一长串
if … else if都在测试同一个变量时,switch写起来更整齐。 - 没有 case 匹配时运行
default,就像最后的else。
English
let day = "sat";
switch (day) {
case "sat":
console.log("Weekend");
break;
case "mon":
console.log("Back to school");
break;
default:
console.log("A school day");
}
// → Weekend
break 结束这个 case
break跳出switch。- 没有它,JavaScript 会继续运行下一个 case。这叫作贯穿(fall-through)。
- 贯穿也可以故意使用:把几个共用同一动作的 case 叠在一起。
English
let day = "sun";
switch (day) {
case "sat":
case "sun":
console.log("Weekend");
break;
default:
console.log("Weekday");
}
// → Weekend
例题:奖牌的分数
问题:奖牌是 "gold"、"silver" 或 "bronze"。金牌得 3 分,银牌 2 分,铜牌 1 分,其他得 0 分。
let medal = "silver";
let points;
switch (medal) {
case "gold":
points = 3;
break;
case "silver":
points = 2;
break;
case "bronze":
points = 1;
break;
default:
points = 0;
}
console.log(points);
// → 2
switch 只负责选择。无论运行的是哪个 case,后面那一句 console.log 都会打印结果。
注意
switch用===比较。所以case 1不匹配字符串"1"。- 一个
case只测试一个确切的值。像"70 或以上"这样的范围,要用if … else if。
常见错误
- 忘了写
break。下一个 case 也会运行,它的值会覆盖你的值。 - 写成
case "gold" || "silver":。那只是一个值"gold"。应该叠两行case。 - 把
default放在别的 case 上面却没有break。它仍然只在没有匹配时运行,但运行后会贯穿到下面的 case。把default放在最后。
现在轮到你
- 用
switch选出一个值,再让两个 case 共用一个动作。 - 按检查答案来测试它。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
let size = "M"。用 switch:"S" 打印 small,"M" 打印 medium,"L" 打印 large,其他打印 unknown。
点击“运行”查看此处输出。
难度 2/5 · 今日首次完成可获 140 金币及少量额外奖励
写一个函数 dayType(day):"sat" 或 "sun" 返回 "weekend",其他返回 "weekday"。用一个 switch,把两个 case 叠在一起。
点击“运行”查看此处输出。
难度 2/5 · 今日首次完成可获 140 金币及少量额外奖励
编写 points(medal):"gold" 得 3,"silver" 得 2,"bronze" 得 1,其他得 0。
点击“运行”查看此处输出。