Pri*_*ens 20 javascript boolean switch-statement
我最近遇到的代码中,switch语句似乎与交换机中的答案(布尔值)和案例中的表达式相反.代码运行正常,但我担心跨浏览器.这是有效的JavaScript吗?
switch(true) {
case (y < 20):
//
break;
case (y < 60):
//
break;
case (y < 130):
//
break;
}
Run Code Online (Sandbox Code Playgroud)
aef*_*fxx 12
这个片段非常好.这只是另一种表达方式:
if (y < 20) {
// ...
} else if (y < 60) {
// ...
} else if ( y < 130) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
是的,它是有效的.
与许多"现代"语言一样,switchJavascript switch与C语言的原始int相差甚远,它只保留了一般语义.
在ECMAScript中规范化的switch子句在此详细解释:http://www.ecma-international.org/ecma-262/5.1/#sec-12.11
基本上,执行其值等于表达式的第一种情况switch(Expression).
明显if else if序列的主要优点是能够省略break语句并执行多个块.请注意,与旧的C开关相反,没有真正的性能改进,在这种情况下,它既不简洁也不易读.
Run Code Online (Sandbox Code Playgroud)SwitchStatement : switch ( Expression ) CaseBlock CaseBlock : { CaseClauses(opt) } { CaseClauses(opt) DefaultClause CaseClauses(opt) } CaseClauses : CaseClause CaseClauses CaseClause CaseClause : case Expression : StatementList(opt) DefaultClause : default : StatementList(opt)
不,它表示switch表达式或case表达式必须是数字,字符串,布尔值或任何东西.true作为switch表达式y < 20是完全可以接受的,并且作为case表达式是完全可以接受 请记住,switch表达式和case表达式之间的比较是使用===operator进行的.
在您发布的代码中,第一种true情况将被执行,直到break遇到或开关块结束.