如果此代码的结果表明switch-case表示严格的相等性检查。.
//code 1
switch(0)
{
case false: alert('NOT strict');
break;
case 0: alert('strict'); // shows up as expected
}
..那么为什么第二个结果似乎相反呢?..是否发生了任何类型转换?
// code 2
switch(0)
{
case 0: alert('may or may not be strict'); // I just added this case.. does it have an effect.. why?
case false: alert('NOT strict'); // this shows up!..
break;
case 0: alert('strict'); // ..instead of this!
}
注1:我的问题不是是否进行严格的相等性检查。.我已经在这里查询了该问题的答案。我的问题是..为什么两个结果之间存在矛盾? 代码2不应该给我们“严格”而不是“不严格”吗?
答案 0 :(得分:0)
在第二个版本中,您在第一个break
的末尾遗漏了case 0:
。因此,它将继续执行下一种情况,而无需执行测试。然后break
语句阻止它执行第二个case 0:
。
答案 1 :(得分:0)
您没有break语句,因此execution falls-through。没什么不同:
switch(0)
{
case 0:
alert('case 0');
// no break statement, so the next case runs if this one did
case 'bologna':
alert('case bologna');
}