JS高级 03-32 语句-switch语句

switch 语句与 if 语句的关系最为密切,而且也是在其他语言中普遍使用的一种流控制语句。 ECMAScript中switch语句的语法与其他基于C的语言非常接近,如下所示:

switch (expression) { 
	case value: statement
		break;
	case value: statement 
		break;
	case value: statement 
		breakcase value: statement 
		breakdefault: statement 
}

switch语句中的每一种情形 ( case ) 的含义是:“如果表达式等于这个值(value),则执行后面的 语句(statement)"。而 break关键字会导致代码执行流跳出switch语句。如果省略break关键字, 就会导致执行完当前case后,继续执行下一个case。最后的default关键字则用于在表达式不匹配前面任何一种情形的时候,执行机动代码(因此,也相当于一个else语句)。

从根本上讲,switch语句就是为了让开发人员免于编写像下面这样的代码:

if (i == 25){ 
	alert("25")} else if (i == 35) { 
	alert("35")} else if (i == 45) { 
	alert("45");
} else {
	alert("Other");
}

而与此等价的switch语句如下所示:

var i = 25;

switch (i) {
	case 25: 
		alert("25");
	break;
	case 35: 
		alert("35");
	break;
	case 45: 
		alert("45");
	break;
	default: 
		alert("Other");
}

通过为每个case后面都添加一个 break 语句,就可以避免同时执行多个 case代码的情况。假如确实需要混合几种情形,不要忘了在代码中添加注释,说明你是有意省略了break关键字,如下所示:

var i = 25;

switch (i) {
	case 25: 
	/* falls through */
	case 35: 
		alert("25 or 35");
	break;
	case 45: 
		alert("45");
	break;
	default: 
		alert("Other");
}

虽然ECMAScript中的switch语句借鉴自其他语言,但这个语句也有自己的特色。首先,可以在 switch语句中使用任何数据类型 (在很多其他语言中只能使用数值),无论是字符串,还是对象都没有问题。其次,每个case的值不一定是常量,可以是变量,甚至是表达式。请看下面这个例子:

switch ("hello world") {
	case "hello" + " world": 
		alert("Greeting was found.");
	break;
	case "goodbye": 
		alert("Closing was found.");
	break;
	default: 
		alert("Unexpected message was found.");
}

在这个例子中,switch语句使用的就是字符串。其中,第一种情形实际上是一个对字符串拼接操作求值的表达式。由于这个字符串拼接表达式的结果与switch的参数相等,因此结果就会显示 “Greeting was found.”。而且,使用表达式作为case值还可以实现下列操作:

var num = 25;
switch (true) {
	case num < 0: 
		alert("Less than 0.");
	break;
	case num >= 0 && num <= 10: 
		alert("Between 0 and 10.");
	break;
	case num > 10 && num <= 20: 
		alert("Between 10 and 20.");
	break;
	default: 
		alert("More than 20.");
}

这个例子首先在switch语句外面声明了变量num。而之所以给switch语句传递表达式true,是因为每个case值都可以返回一个布尔值。这样,每个case按照顺序被求值,直到找到匹配的值或者遇到default语句为止(这正是这个例子的最终结果)。

switch语句在比校值时使用的是全等操作符,因此不会发生类型转换(例如, 字符串"10"不等于数值10)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小沈曰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值