switch 可以当做是 if..else if..else.. 的简化版本
switch (5) {
case 2:
console.log('2')
break;
case 3:
console.log('3')
break;
default:
console.log('啊啊啊')
}; // 啊啊啊
1.switch 中存在一些不太为人知的陷阱
通常 case 中的switch都是简单值,所以并没有问题,然而,有时候会需要通过强制类型转换进行相等比较(==),这时候就需要一些特殊处理。
var a = '42';
switch (true) {
case a == 10:
console.log('10')
break;
case a == 42:
console.log('10')
break;
default:
// 永远执行不到这里
} // 10
2.除简单值之外, case 中还可以出现各种表达式,他会将表达式的结果和true进行比较,因为a==42 的结果是true,所以条件成立。
3.尽管可以使用==,但 switch 中true和true 之间仍是严格相等比较,即如果 case 表达式的结果为真值,但不是严格意义上的true,则条件不成立,所以在这利用 || 和 && 等逻辑运算符很容易掉进坑里.
var a = 'hello world';
var b = 10;
switch (true) {
case (a || b == 10):
console.log('555') // 永远执行不到这里
break;
default:
console.log('Oops')
} // Oops