为什么在本例中切换大小写严格相等检查似乎失败?

时间:2018-12-05 19:50:12

标签: javascript switch-statement case

如果此代码的结果表明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不应该给我们“严格”而不是“不严格”吗?

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');
}