🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[toc] ## 基本定义 switch语句接收一个参数值进行匹配,每一个case分块就是一条匹配项,当传递的参数`n`等于`case expr:`中的`expr`时,会执行对应case分块下的语句。 ``` switch(n){ case x: ... break; case y: ... case z: ... break; default: ... } ``` ### 注意事项 - 如果case分块下的语句存在`break`,则会跳出,**否则**会继续往下匹配 - default中的分块语句是当所有case匹配项都**落空时**才会执行 ## case expr ### expr可以是任何js表达式 ``` var score = 60 var var1 = 56; switch(true){ case score>50: console.log('及格'); case score>(function(){return 55})(): console.log('不错'); case score>var1: console.log('优秀'); break; } ``` ### 在进行匹配时不会进行类型转换 ``` switch(true){ case ([]): console.log('及格'); break; case (false): console.log('失败'); break; } ``` 不会命中`[]`,照理说`[]`会转换为true,但在switch中不会转换 ## switch n ### 当为一个非布尔值 当n为一个非布尔值,`case expr`中的`expr`也必须是一个非布尔值 以下示例就**不会**有结果 ``` var score = 60 switch(score){ case (score>50): console.log('及格'); break; } ``` 会产生这种误解,可能来自于`while`语句 ### 当为一个布尔值时 ``` switch(false){ case (true): console.log('及格'); break; case (false): console.log('失败'); break; } ``` 会输出 失败