在高性能jiavascript一书中提到switch性能比if-else好,但是如何switch在一个case里面写多个条件呢:
switch case多值匹配一般有两种情况
1.列举(将所有值列举出来)
var n= 3;
switch (n){
case 1:
case 2:
case 3:
console.log("0~3");
break;
default:
console.log("都不是");
break;
}
2.利用布尔值true
var n= 1;
switch (true){
case n>=0&&n<=10:
console.log(n);
console.log("0~10");
break;
case n>10:
console.log(n);
console.log(">10");
break;
default:
console.log("都不是");
break;
}
在这种情况下case内部依旧能取到n的值 会正确输出 console.log("0~10");
但是如果像这样写:
var n= 1;
switch (n){
case n>=0&&n<=10:
console.log(n);
console.log("0~10");
break;
case n>10:
console.log(n);
console.log(">10");
break;
default:
console.log("都不是");
break;
}
就会错误输出 都不是
所以改写为:
var n= 1;
switch (n){
case ((n>=0&&n<=10) ? n : -1):
console.log(n);
console.log("0~10");
break;
case n>10:
console.log(n);
console.log(">10");
break;
default:
console.log("都不是");
break;
}
此时会正确输出 console.log("0~10");
参考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/switch