default
在 switch
中是可选的,并非必不可少,但我们通常会把它放在最后来执行兜底操作。但是你们有试过把 default
放在 case
的中间吗?会发生什么神奇的现象吗?今天就让我们来做几个实验。
实验1
var a = 10;
switch (a) {
case 1:
console.log(1);
case 2:
console.log(2);
default:
console.log('default');
case 3:
console.log(3);
case 4:
console.log(4);
}
上面的示例输出的结果依次是 default
、3
、4
实验2
var a = 10;
switch (a) {
case 1:
console.log(1);
case 2:
console.log(2);
default:
console.log('default');
case 3:
console.log(3);
break;
case 4:
console.log(4);
}
上面的示例输出的结果依次是 default
、3
这两个实验很迷,输出 default
我们能理解,但为什么没有匹配到的 3 和 4 也会输出呢?既然 3 和 4 输出了,为什么 1 和 2 不输出呢?
其实上面的代码是这样执行的,首先遍历并找到匹配的 case
,如果没有匹配(我们这个例子就是没有匹配的)则执行 default
,但此时 default
中不存在 break
,所以程序又沿着代码继续往下走了!输出了 3,第二个实验中因为输出 3 之后碰到了 break
,所以没有输出 4。